Как стать автором
Обновить

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

Вообще-то, наверное, «текстовый чат».
Вы правы, исправил. Спасибо!
Так делали ещё во времена, когда я ходил пешком под стол, да и решение такое вполне очевидно и не вызывает какого-либо интереса, в чём смысл статьи — притвориться КО?

Я бы понял, если бы рассказывалось о реализации поллинга или архитектуре\паттернах вебсокетной реализации.
Наверное реклама проекта, потому что статья на самомо деле слабоватая. Пару гистов чтобы не забыть )))
Не совсем так. В этой реализации, как я вижу, PHP не дёргается каждые пол секунды как «ещё во времена, когда я ходил пешком под стол» а дёргается nginx что как я понимаю в десятки раз увеличивает нагрузку которую сможет такое решение выдержать по сравнению с той реализацией, которую вы имеете ввиду.

По сути статья в 2х словах — смотрите какой интересный модуль есть у nginx и как его можно использовать.

Автору спасибо за наводку на модуль, интересно будет посмотреть его.
ETag и Last-Modified же собирается после отработки всего серверного кода, разве нет? Если я прав, то мы получаем наоборот только увеличение нагрузки (двойной запрос) — один на проверку актуальности, другой на получение данных.
Нет, JS всегда(если конечно же в какой-то момент AJAX запрос не вернёт success и дело не дойдёт до setTimeout), каждые пол секунды, долбит nginx на тему нет ли чего нового (при этом PHP не используется). Все сообщения Nginx хранит в ОЗУ —

push_stream_shared_memory_size 32M;


А в nginx они попадают, в данном примере, через PHP, который при каком-то событии пихает их туда вот так:
$channel_id = subscriber1; //id канала для публикации сообщения

$message=’Привет!’; // сообщение

//отправка сообщения
$ch = curl_init('http://127.0.0.1/publish?id='.$channel_id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($message));
curl_exec($ch);
curl_close($ch);


По крайней мере я так это понял по коду. Но могу ошибаться.
О как. Да, похоже на правду, спасибо, моя вина что не разобрался в коде и подходе.
Не совсем так, Ajax запрос отправляется один раз каждые 5минут (согласно директиве push_stream_longpolling_connection_ttl 300s;), а при success делает повторный запрос (переподключается) через полсекунды.
Я бы на вашем месте использовал websocket.
В вебсокет «снаружи» не отправить. Да и кол-во коннекшенов к нему лимитировано в браузере
Хе. тема видеочата в разы была бы интереснее.
О. Это первая статья на Хабре? Тогда — с почином!
Не знал про подобный модуль, очень вовремя появился пост. Который раз уже такое случается — всплывает проблема и практически сразу на хабре появляется статья с решением. Магия (:

Есть необходимость использовать websocket или long-polling, проект на Groovy + Grails (Java). Есть grails-плагины использующие Atmosphere, но как-то не хочется с ними возиться, да и непонятно, что с производительностью.

А тут такое интересное решение, а главное — универсальное (подходит для чего угодно), да и производительность должна быть неплохой.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории