#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… Я сомневаюсь, что мой босс согласится с этим. (Хотя я бы так и сделал)