long poll / comet - как оптимально реализовать?

zig

Новичок
За PHP + SQL взялся недавно, но с HTML и JavaScript знаком хорошо. Написал чат, где JS каждые две секунды опрашивает сервер на предмет новых сообщений. Но такой способ мне не нравится - много холостой работы, много лишнего трафика.
Попытался вводить php-скрипт в циклический sleep, удерживая соединения по полминуты в ожидании обновления данных. Но мало того, что сервер пытается остановить выполнение по таймауту, так мне приходится ещё и часто-часто обращаться к базе, чтобы узнать об изменении данных.
В общем, сам вижу, что изобретаю какие-то велосипеды.

Каким образом можно реализовать достаточно быстрый чат (с php-сервером) без постоянных его опросов? Может, есть примеры? Только я не люблю использовать разные jQuery, у меня собственный движок на JS.
 

zig

Новичок
Разве веб-сокеты не запретили, отправив их назад на доработку в W3C?
 

zig

Новичок
Ну неясно что ли, что я имею ввиду? Использование веб-сокетов, конечно, уголовно не преследуется, но в большинстве браузеров они либо не поддерживаются, либо отключены по умолчанию.
 

zig

Новичок
Firefox и Opera также прекратили поддержку веб-сокетов, "пока не будут устранены проблемы с безопасностью".
http://www.opennet.ru/opennews/art.shtml?num=28944

И хотя сейчас дело сдвинулось с мёртвой точки, веб-сокеты в этих браузерах по умолчанию всё ещё отключены.
 

tz-lom

Продвинутый новичок
zig
возьми это
http://www.ape-project.org
в принципе логику можно и на JS написать,но если надо - можно вызвать http запрос (который обслужить через php)
как вариант - php демон коннектящийся к APE и обрабатывающий сообщения на канале
 

xayam

Новичок
т.е. ты сам лично уже что-то сделал на этих вебсокетах? ну и как оно? сцылкой не поделишься?
делаю, поделюсь. Но не с тобой.

Полубраузеры не интересуют.
 

Andreika

"PHP for nubies" reader
со мной то зачем делиться? это была не просьба, а скорее под***ка
можешь с автором поделиться, если его интересуют поделки со сроком реализации "через пару лет" и для "илитных бравзеров"
 

xayam

Новичок
со сроком реализации "через пару лет"
Сразу видно человека.
Сразу видно, чем Вы живете.
Но не буду развивать эту тему - она Вам точно не понравится.
"А я не люблю огорчать спящих".
 

iceman

говнокодер
zig
не каждую секунду обновляй, обновля по среднему времени сообщений за последнию минуту, максимум через 10-15 сек, это время должен присылать сервер.

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

кароче думай головой по оптимизации скрипта, погугли.
 

fixxxer

К.О.
Партнер клуба
"Проблемы с безопасностью" - фигня высосанная из пальца. Нафига отключили не понятно, видимо чтобы Специалисты По Секурити хавальник закрыли. Абсолютно идентичные "проблемы с безопасностью" у того же флэша и ничего.
 

zig

Новичок
на хабре нашёл одну статью с исходниками чата. пока особо не разбирался, но вроде бы там удерживание соединения сервером - long poll'инг (а не сокеты, как написано).
http://habrahabr.ru/blogs/webdev/41223/

проверил исходники тут, работают.
http://teal.byethost32.com/sockets/
и хотя на тормозном хостинге выигрыш в скорости не ощущается, трафик в режиме ожидания практически не расходуется.
в принципе, это то, что нужно. пока только не выяснена стабильность работы при большом числе юзеров.
 

zig

Новичок
знаю. я имел ввиду то, что чат не по технологии веб-сокетов работает.
 

iceman

говнокодер
все это имитация постоянного соединения поверх HTTP: суть - присвоение сеансу идентификатора и составление рассылки для этих идентифкаторов, чтобы опять забрать их АЯКС запросом. сам сервер не шлет ничего клиенту.

в принципе у тебя так же будут слатся аякс запросы каждые доли секунд, обработка при правильном распределении будет просто быстрее.

короче опять же думать нужно головой, как запилить узкие места, и организовать лигку "кеширования" как на клиенте так и на сервере.
 
Сверху