dimikot / dklab_realplexor

Comet server which handles 1000000+ parallel browser connections.
148 stars 43 forks source link

проблема с получением сообщений, отправленных одновременно в разные каналы #19

Open bursonic opened 12 years ago

bursonic commented 12 years ago

js: ... realplexor.subscribe("Alpha", function(data, id) { document.getElementById('first').innerHTML += data + "
"; }); realplexor.subscribe("Beta", function(data, id) { document.getElementById('second').innerHTML += data + "
"; }); ...

php: .... $rpl->send("Alpha", array("here" => "is", "any" => array("structured", "data"))); $rpl->send("Beta", array("x" => "y", "other" => array("complex", "message"))); ....

После выпонения скрипта, в firebug видно, что по xhr запросу http://rpl.mydomain/?identifier=demo_Alpha,demo_Beta&ncrnd=1339863583432 пришло только одно сообщение (в Alpha). сообщение для Beta не пришло в новом xhr запросе http://rpl.mydomain/?identifier=1339863592.26114014500000:demo_Alpha,demo_Beta&ncrnd=1339863592325.

Далее при одновременной отправке сообщения продолжают приходить только в Alpha. Если отправить запрос только в Beta или вставить sleep(1); между запросами, то сообщение доходит.

После раздельной отправки сообщений любым из способов, начинают приходить одновременно отправленные сообщения. Запросы xhr вида http://rpl.mydomain/?identifier=1339864176.81945016900000:demo_Alpha,1339864177.82348017100000:demo_Beta&ncrnd=1339864237956.

Видно, что в последнем запросе, работающем корректно, обращение к Beta уже идет по ID:Name. Но ID был получен только после раздельной отправки сообщений. При одновременной отправке клиент ID получить не может.

eugene-dm commented 11 years ago

Столкнулись с той же самой проблемой. Хотелось бы узнать, есть ли какое-то решение, кроме установки задержки.

Slavenin commented 11 years ago

интересно проект еще жив или уже не очень?.. проблема с id есть судя по идентификатору это метка микротайма, и так как сообщения приходят в один момент времени, то и метка у них получается одинаковая. Поковырялся в исходниках, не нашел, где задается id канала. Автор, если для тебя проект еще актуален, поправь пожалуйста этот баг, так как при большой нагрузке и подписке пользователя на некоторое количество каналов задержка даже в полсекунды это много. Согласен есть функционал рассылки сообщений в несколько каналов, но он подходит, если нужно отправить одинаковое сообщение в разные каналы. А если нужно отправить разные сообщения в разные каналы?

Slavenin commented 11 years ago

автор, ау

Magir commented 11 years ago

В JS нужно проставить курсоры: realplexor.setCursor("Alpha",0); realplexor.setCursor("Beta",0);

Должно помочь.

GaMsh commented 11 years ago

setCursor делает выборку всего что есть в буфере - это не то. Очень острая проблема! Хэлп!

Magir commented 11 years ago

Версию для C++ пробовали? У меня после перехода на неё куча глюков ушло само собой :)

GaMsh commented 11 years ago

Вы про клиента? Я бы попробовал но речь идёт о сайте, а также клиенте на андроид, документации как правильно реализовать работу с протоколом я не нашел, всё сугубо копированием поведения JS клиента... :(

GaMsh commented 10 years ago

Что-то не могу найти документации по установке c++ версии ((

dimikot commented 10 years ago

https://github.com/DmitryKoterov/dklab_realplexor/blob/master/cpp/src/Make.sh

GaMsh commented 10 years ago

Нда... вроде всё просто, но зависимости руками брать откуда-то там... Не получается скомпилить вообщем :( А perl версия уже по 4-6 секунд на push задержки делает под не такой уж и большой нагрузкой... :(

dklab_realplexor.cpp:40:38: fatal error: boost/algorithm/string.hpp: Нет такого файла или каталога compilation terminated.

dimikot commented 10 years ago

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

autowp commented 10 years ago

Подтверждаю наличие проблемы с недоставкой второго из единовременно отправляемых сообщений, как описано в сабже. Имеет место и для perl, и для cpp версий.

На словах фикс выглядит так: При отправке клиенту (слушающему 2 и более каналов), отправлять не только данные первого канала с меткой времени, но и метки времени для остальных каналов, которые должны инициализироваться временем установления соединения.

OSDDQD commented 9 years ago

Здравствуйте, это не issue, а скорее вопрос, но не смог подобрать правильного места. Что происходит с комнатами после того, как клиент отсоединился и в ней не осталось больше активных пользователей.

Slavenin commented 9 years ago

Есть альтернатива http://post-hawk.com и не надо ничего ставить на сервер и настраивать.

msidog2 commented 9 years ago

Проект забросил автор как я понял из гита и их сайта\форума.. уже пару дней мучаюсь с данным коммет сервером...на дебиане (впс слабой) скомпилировать не получилось ошибка gcc++ process kill чет там... на MAC OS не компилиться из-за ошибки в /events/server.h там есть параметры ::set а мак хочет что бы использовалось template...но кодить на том языке не шарю...юзаю перл версию...но нормальной доки или примеров толковых php не нашел..буду крутиться из того что уже имею.. Slavenin, посмотрел я тот пост-хавк и то совсем не выход... 1) отправлять данные через чужой сервер "This is нехорошо" 2) не известно как долго проживет тот проект да и уже лучше тогда использовать штатные средства сервера nginx (модули есть) или инные способы

Slavenin commented 9 years ago

1) отправлять данные через чужой сервер "This is нехорошо"

библиотека поддерживает шифрование на клиенте, так что тут проблемы нет

2) не известно как долго проживет тот проект

будет жить и развиваться :)

да и уже лучше тогда использовать штатные средства сервера nginx (модули есть) или инные способы

нужно их ставить настраивать и пилить свой велосипед, а здесь уже всё готово.

msidog2 commented 9 years ago

Вы правы, На вкус и цвет фломастеры все равно одинаковые =) Разобрался с данным плексером, очень радует скорость работы... Но ломаю голову не первый час как интегрировать свой самопис...