实时聊天问题(django/js)

Posted

技术标签:

【中文标题】实时聊天问题(django/js)【英文标题】:Real-time chat issue (django/js) 【发布时间】:2016-02-25 02:46:00 【问题描述】:

我正在进行实时聊天。我需要更改房间所有者和连接用户的状态以及 UI。由于 NodeJS/SocketJS/etc 不保证消息传递,我为此切换到纯 Ajax。

系统是这样工作的: - 用户按下一个按钮来改变他的状态 - 一个 Ajax 请求被发送到服务器,一个状态更改请求被保存在 DB 的队列中 - 用户每秒发送一次 Ajax 心跳。在服务器上,此心跳函数还处理队列(当由房间所有者发送时)。此外,它每次都会发送房间内用户的当前状态作为响应。

问题是:双方可能存在暂时的互联网问题,从而导致各种问题。发生这种情况的原因是,在服务器上以任意顺序处理心跳 Ajax 请求,或者在客户端以错误的顺序接收响应。因此,用户对当前状态的数据有误,UI 更改也有误。

制作这样的系统时,最好的方法是什么?我做错了什么或如何解决上述问题?

谢谢!

【问题讨论】:

Waitaminute 你是在说 django 和 socketio don't guarantee message delivery, 吗? SocketJS* 好吧,一条消息被发送了一次——无论谁能够捕捉到它——都捕捉到了它。 groups.google.com/forum/#!topic/sockjs/drG5B4PhmeE***.com/questions/20685208/… 整个堆栈是(或者我应该说曾经是)是 Django + Redis + SockJS + NodeJS。但这甚至不是我想要解决的问题。 【参考方案1】:

看看 Max 的博客 Django-Realtime-Chat 以及他是如何做到的。

【讨论】:

谢谢,但我很久以前就看过这篇文章了,这不是我要在这里解决的问题。我已经切换到纯 Ajax 来更新用户状态,但问题是,如果由于 Internet 连接不良等原因导致延迟,Ajax 响应会以错误的顺序返回。或者有时只有一个请求被卡住并稍后返回 - 其中包含旧状态,然后发生各种混淆。 使用文章中的系统,临时连接丢失将导致用户错过在断开连接期间发送的所有消息。而且我负担不起,尤其是在涉及状态更新等服务消息时。

以上是关于实时聊天问题(django/js)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ratchet Websockets 进行 PHP 实时聊天

实时聊天:我都有哪些选择? [关闭]

Youtube“实时聊天”直接网址

基于 Android 的实时聊天应用程序

通过 Faye 在 Rails 应用程序上进行实时聊天,但通过 Apache 在乘客上进行实时聊天

websocket+node.js 实时聊天系统问题咨询