Вопрос

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

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top