你将如何在 django 中实现聊天?

Posted

技术标签:

【中文标题】你将如何在 django 中实现聊天?【英文标题】:How would you go about implementing chat in django? 【发布时间】:2011-04-28 05:00:36 【问题描述】:

如果你要在 Django 中实现聊天(即实时文本对话),你会怎么做?

我对此的看法(请对菜鸟有所怜悯)- 创建一个用于存储归档消息的表和一个用于存储当前消息的表。 并通过使用 javascript 每 20 秒查询一次当前消息表来填充当前聊天。但这感觉太不对劲了。 一定有更好的方法。我听说过一种叫做推送技术的东西。如何在 django 中使用它? 附言我的网站正在共享托管在 dreamhost 上。

【问题讨论】:

【参考方案1】:

大多数网络聊天应用程序都倾向于使用 Comet Programming。 Comet 并不是真正的推动技术,而更像是对它的一种模拟。首先,comet 有不同的实现,但通常使用 pooling 和 ajax 来反复检查服务器以查看是否有消息。 Comet 通常会导致往返次数过多,因此已采取措施寻找更合适的替代方案,例如简单地保持连接打开的 Bosh。这实际上可以被认为是真正的推动而不是彗星。下面的 wiki 链接列出了替代方案,但总的来说,我认为 Comet 和 Bosh 是最常用的聊天方法。你甚至可以同时使用这两种方法。这里有一些链接。

Django powered AJAX Chat Django and Comet Comet (programming)

【讨论】:

【参考方案2】:

如果你主要关心前端,看看彗星。

至于后端,您有很多不同的选择。更直接的方法是将每个聊天消息存储在给定聊天室的数据库中。聊天室表格和聊天消息之间可能是多对多关系。

其他解决方案包括未内置于 Django 的键值存储数据库。您可以将消息推送到 redis 集中,或将活动聊天室数据存储在 memcached 中。

由于这是在dreamhost 上,我会查看数据库选项。事实是,您必须在每条聊天消息中存储一些数据。谁制作了它,它是什么时候制作的,等等。这必须在您的环境中的某个时间点进入表格。试着让它工作,然后看看你能不能让它更快。

【讨论】:

赞成“让它工作,然后看看你能不能让它更快。”

以上是关于你将如何在 django 中实现聊天?的主要内容,如果未能解决你的问题,请参考以下文章

你将如何在 Java 中实现 LRU 缓存?

如何在 Android 应用中实现 XMPP 聊天?

如何在 iPhone 应用中实现谷歌聊天

如何在使用 facebook-ios-sdk 的应用中实现聊天

如何在 Flutter(Android 和 Ios)中实现与 WebRTC 的电话会议视频聊天

如何在 Jinja 中实现类似 Django 的标签