PHP, javascript, ajax — общение между 2 пользователями

#php #javascript #ajax #communication

#php #javascript #ajax #Информационные материалы

Вопрос:

Всем доброго дня.

Мне нужно сделать это:

Когда пользователь X нажимает кнопку, пользователь Y видит фотографию. До этого пользователь Y ничего не видит.

Я сделал это следующим образом: я создал базу данных на сервере mysql и создал таблицу с фотографиями и флагами. Когда пользователь X нажимает кнопку, я отправляю ajax-запрос и меняю флаг на соответствующую фотографию. Пользователь Y также отправляет ajax-запрос каждые 1 секунду, чтобы посмотреть, изменилось ли что-нибудь.

Звучит нормально, выглядит нормально, работает… это так, но пока все в порядке. Когда 100000 пользователей отправляют 1 ajax-запрос каждые 1 секунду, сервер выходит из строя. Сначала сервер mysql, затем apache.

Итак … мой вопрос в том, есть ли способ сделать это без такого количества ajax-запросов? Что-то вроде отправки страницы с определенной «вещью», которая сообщает браузеру сохранить тот же сокет и отправить позже изображение? Что-то вроде потока, но вместо изображений должны быть html-страницы / изображения / что угодно.

Я знаю, что Java-апплет был бы решением, но мне понадобилось бы решение php (для серверной части) js (для клиентской части).

И да, я знаю, что, вероятно, получу ответ «вы не можете», но это заслуживает того, чтобы попробовать.

Комментарии:

1. Это обязательно должно происходить каждые 1 секунду? Как насчет 3 секунд? Это немедленно снижает нагрузку до 1/3 — если произойдет сбой при 100 000 пользователях, вы могли бы использовать (теоретически) 300 000 пользователей.

2. На самом деле мне вроде как нужно делать запросы на уровне 0,5 … 1 было компромиссом. Также я добавил время очистки… в течение 10 секунд каждые 120 секунд пользователи ничего не отправляют … все еще не в порядке.

3. Есть ли у вас возможность для HTTPS? Я спрашиваю об этом, потому что тогда у вас есть безопасный туннель с каждым клиентским компьютером, что позволяет отправлять асинхронные ответы обратно клиенту.

4. У меня есть … на самом деле у меня есть возможность использовать любой протокол… Как мне отправлять ответы?

5. Я нашел кое-что, что может быть очень интересным для ваших нужд, я опубликую это в качестве ответа

Ответ №1:

Поскольку HTTP не имеет состояния, вам необходимо создать постоянное или продолжительное сокет-соединение между клиентами и сервером.

Это приложение для чата, написанное на PHP, AJAX и Ruby backend.

Главная страница приложения веб-чата, более конкретно часть о сервере сокетов

Ответ №2:

Как насчет WebSockets?

Редактировать. HTTP keep-alive может помочь.

Комментарии:

1. Ну … что-то в этом роде. Но из того, что я там прочитал, они реализованы только в более новых браузерах… и я также не вижу IE… Я сомневаюсь, что мой босс согласится с этим. (Хотя я бы так и сделал)