2009-08-24 4 views
4

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

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

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

+0

Многие браузеры настроены на подключение не более 2 подключений на сервер. Это хорошая причина для того, чтобы иметь один канал связи с длинными опросами, через который проходят все подписки. – Christian

ответ

1

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

+0

Спасибо за ваш ответ. И этот путь также является тем, что я использую сейчас. Только одна небольшая проблема: отложенные сообщения могут быть отправлены только после следующего установления соединения с длинным опросом (или с новым приходящим сообщением), поэтому будет небольшая задержка. –

+0

Вы также можете использовать сообщения о сердечном ритме, чтобы избежать разъединения, но не полагаться на него для согласованности. –

Смежные вопросы