Нет. Клиенты должны "опросить" сервер повторно.
Я думаю, что ключевым моментом здесь является проектирование взаимодействия. Хитрость заключается в том, чтобы обмануть пользователя, думая, что чат является мгновенным, но в действительности он обновляется один раз в 1, 2, 3 или 10 секунд.
Идеи:
1) Когда пользователь отправляет сообщение, показывает его прямо в чате и запускает опрос.
2) Если опрос возвращается с несколькими сообщениями от других пользователей, не добавляйте их все сразу, фактически добавляйте их в течение 1-2 секунд или около того, с произвольным интервалом, чтобы они выглядели так, как будто они ' возвращаемся "мгновенно" и самостоятельно. (Если сразу приходит множество сообщений, пользователь очень быстро понимает, что чат обновляется тут же, а не постоянно.)
3) Если пользователь простаивает в течение х времени. Снижайте частоту опроса каждые 10 секунд или около того.
4) Если пользователь активен, то есть отправляет много сообщений, чаще опрашивайте.
5) Имейте статический файл для каждого канала, на который вы записываете время последнего обновления чата. Например, файл chat-teenfun-lastupdate.txt
содержит содержимое 1224934239
или любой другой формат времени, который вы предпочитаете. Служите этому файлу статически и разрешите клиентам опрашивать этот файл, чтобы проверить, обновился ли канал, а не вызывать chat-poll.php?ch=teenfun
, который выполняет динамическую проверку. Статические файлы обслуживаются примерно в 10-100 раз быстрее, в зависимости от работы, выполняемой для динамического сценария, и она понадобится вам, когда вы получите более 250 пользователей.
Удачи и веселья!
/ 0
PS. В качестве альтернативы вы могли бы фактически позволить клиентам делать ajax-вызов на сервер и держать их «зависшими». То есть вы принимаете их запрос и делаете вид, что начинаете отправлять данные обратно, но затем просто делаете паузу. Когда что-то случается, вы заканчиваете ответ оценочными данными. Для того, чтобы это работало, я думаю, вам нужно написать свой собственный HTTP-сервер, который делает это специально, так как у вас не может быть 250 php-процессов, слоняющихся в памяти. Может быть, Lighttpd можно было бы так или иначе использовать с этим модом LUA-кеша. Я не знаю. Было бы интересно, хотя. Черт, я должен попробовать это когда-нибудь :) 1026 *