Модель очереди сообщений в Erlang (Comet chat)? - PullRequest
4 голосов
/ 24 августа 2009

Я делаю чат кометы с Эрлангом. Я использую только одно соединение (long-polling) для передачи сообщений. Но, как вы знаете, соединение с длительным опросом не может оставаться постоянно подключенным. Каждый раз, когда новое сообщение приходит или достигает тайм-аута, оно прерывается и затем снова подключается к серверу. Если сообщение отправляется до повторного подключения, проблема в сохранении целостности чата.

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

Должен ли я создавать очередь сообщений для каждого соединения? Или какой еще лучший способ решить это?

1 Ответ

1 голос
/ 24 августа 2009

Мне кажется, самый простой способ иметь одну очередь процессов / сообщений на пользователя, подключенного к чату (даже иметь более одного окна чата). Чем отслеживать отметку времени последнего сообщения в приложении окна чата, а при повторном подключении запрашивать сообщения после этой отметки времени. Процесс очереди сообщений должен хранить сообщения только в течение разумного промежутка времени. В этом сценарии переподключение полностью зависит от клиента. В другом сценарии вы можете отправлять какие-то биты с сервера, но это кажется мне менее надежным. Это не решение проблемы с другой причиной отключения, кроме времени ожидания. Существует множество вариантов серверной очереди: одна очередь на клиента, на пользователя, на комнату чата, на ...

...