2015-11-23 4 views
1

Я работаю в чате в режиме реального времени. Мне нужно изменить статус владельца комнаты и подключенных пользователей вместе с пользовательским интерфейсом. Поскольку NodeJS/SocketJS/etc не гарантирует доставку сообщений, я переключился на чистый Ajax для этого.Вопрос в режиме реального времени (django/js)

Система работает так: - Пользователь нажимает на кнопку, чтобы изменить свой статус - запрос Ajax, отправляемые на сервер, а запрос на изменение состояния сохраняется в очереди в БД - Пользователи отправить Ajax сердцебиение каждую секунду. На сервере эта функция heartbeat также обрабатывает очередь (когда отправляется владельцем комнаты). Кроме того, каждый раз он отправляет текущие статусы пользователей в комнате.

Проблема заключается в том, что с обеих сторон могут возникать временные проблемы с Интернетом, что вызывает всевозможные проблемы. Это происходит из-за того, что запросы Ajax от сердечного ритма обрабатываются в произвольном порядке на сервере или ответы поступают в неправильном порядке на стороне клиента. В результате пользователи имеют неверные данные о текущих статусах, а изменения пользовательского интерфейса также неверны.

Каков наилучший подход при создании такой системы? Что я делаю неправильно или как я могу исправить проблемы выше?

Спасибо!

+0

Waitaminute Вы говорите, что django с socketio 'не гарантирует доставку сообщений,'? –

+0

SocketJS * Ну, сообщение отправляется один раз - тот, кто смог его поймать - поймал его. https://groups.google.com/forum/#!topic/sockjs/drG5B4PhmeE http://stackoverflow.com/questions/20685208/websocket-transport-reliability-socket-io-data-loss-during-reconnection – Alexander

+0

Весь стек (или я должен сказать, что он был) - это Django + Redis + SockJS + NodeJS. Но это даже не проблема, которую я пытаюсь решить. – Alexander

ответ

0

Взгляните на блог Максима Django-Realtime-Chat и как он это делает.

+0

Спасибо, но я давно видел эту статью, и это не проблема, которую я пытаюсь решить здесь. Я уже перешел на чистый Ajax для обновления статуса пользователя, но дело в том, что есть задержка из-за плохого интернет-соединения и т. Д., Ответы Ajax возвращаются в неправильном порядке. Или иногда только один запрос застревает и возвращается позже - со старым статусом в нем, а затем происходят всевозможные путаницы. – Alexander

+0

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

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