Javascript 如何在服务器端处理简单的基于web的实时聊天的消息?

Javascript 如何在服务器端处理简单的基于web的实时聊天的消息?,javascript,django,livechat,Javascript,Django,Livechat,我正在将一个简单的实时聊天构建到一个运行在Django上的web应用程序中,但有一件事让我感到困惑,那就是我应该如何在用户之间存储消息 聊天将支持多个用户,聊天“会话”由连接到一个用户(即“主机”)的用户组成。该应用程序是一种在线文档协作,因此用户X有一个文档,用户Y和Z将连接到用户X谈论文档,这将是一个聊天会话 如果用户Y断开连接五分钟,然后重新登录并重新连接到用户X,则在用户X和Z不在时,他不应该得到任何在用户X和Z之间共享的消息 如果用户X、Y和Z可以有一个关于用户X文档的聊天会话,那么用

我正在将一个简单的实时聊天构建到一个运行在Django上的web应用程序中,但有一件事让我感到困惑,那就是我应该如何在用户之间存储消息

聊天将支持多个用户,聊天“会话”由连接到一个用户(即“主机”)的用户组成。该应用程序是一种在线文档协作,因此用户X有一个文档,用户Y和Z将连接到用户X谈论文档,这将是一个聊天会话

如果用户Y断开连接五分钟,然后重新登录并重新连接到用户X,则在用户X和Z不在时,他不应该得到任何在用户X和Z之间共享的消息

如果用户X、Y和Z可以有一个关于用户X文档的聊天会话,那么用户X和Y可以连接到关于用户Z文档的同时但单独的讨论

我该怎么处理?我应该在数据库中保存每条消息吗?每条消息都有一个所有者用户和一个目标用户(主机),并使用一个单独的表将用户与消息连接起来(哪些消息对哪些用户可见)

或者我应该将每个会话存储为服务器上的一个HTML文件,附加哪些消息


问题是,我不能直接在客户端之间发送消息。它们必须在POST请求中发送到服务器,然后每个客户端必须定期检查GET请求中的消息。但我不能在客户端获取消息后清除每条消息,因为可能有多个客户端。我应该如何设置?有什么建议吗?

给每条消息一个时间戳(或者只是一个递增的ID)。然后,当客户端共享时,您向他发送属于当前聊天的所有消息,这些消息发生在最近10秒钟内,以及它们的时间戳。然后客户端可以过滤掉他已经收到的消息。大约每5秒就有一次。如果您不需要日志等信息,您可以删除超过10秒的信息

注意,如果你想实现一个真正感觉快速和响应的聊天,你应该考虑使用。在这种情况下,答案会有所不同。服务器应该有一个注册到每个聊天室的客户机列表(有HttpRequest挂起的客户机)。然后,服务器会将发布的每一条消息发送给他们中的每一个人


别忘了。django最好的功能之一是它的可插拔应用程序架构。

当我点击你的“在你重新发明轮子之前搜索”链接,谷歌被卡在我屏幕的右侧时,你无法想象我的惊讶。@Carson-这里也是-我是一个希伯来语使用者!)