1

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

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

如果用户 Y 断开连接 5 分钟,然后重新登录并重新连接到用户 X,那么在他离开时,他应该不会收到用户 X 和 Z 之间共享的任何消息。

如果用户 X、Y 和 Z 可以就用户 X 的文档进行聊天会话,则用户 X 和 Y 可以同时连接到关于用户 Z 文档的单独讨论。

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

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

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

4

1 回答 1

2

给每条消息一个时间戳(或只是一个递增的 ID)。然后,当客户端池时,您向他发送属于当前聊天的所有消息,这些消息在过去 10 秒内发生,以及它们的时间戳。然后客户端可以过滤掉他已经得到的消息。它每 5 秒左右汇集一次。如果您不需要用于记录等的消息,您可以删除超过 10 秒的消息。

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

在重新发明轮子之前不要忘记搜索。django 最好的功能之一是它的可插拔应用程序架构。

于 2010-05-07T11:01:57.487 回答