Django中客户端轮询(反向AJAX)用于聊天请求吗?

0 投票
2 回答
1080 浏览
提问于 2025-04-15 19:41

我想让网站上的一个用户可以向另一个用户发起聊天请求。在我的Django网站上,我希望被请求的用户能实时收到一个框,上面写着:“你想聊天吗?”

我想问问这个客户端轮询的方法怎么样:

用户1点击用户2的昵称,这样就会生成一个POST请求,发送到某个/message/requests的地址,这个请求会在数据库中创建一个类型为聊天请求(CHAT_REQUEST)的消息。与此同时,用户2的浏览器里有一段JavaScript代码,它会不断向服务器查询消息更新。当它收到一个类型为聊天请求的消息时,就会弹出一个窗口...

这个方法的问题似乎在于数据库的访问。

如果客户端每10秒查询一次,而有100个用户保持浏览器窗口打开,那就意味着每秒要进行10次数据库请求。

那么,把这些消息存储在数据库以外的地方,比如Django的内存或会话信息中,会不会更好呢?或者说,PostgreSQL会把这个数据库表缓存到内存中,这样取数据会快一些吗?

2 个回答

1

我建议你考虑使用类似“COMET”的通信方式,而不是“AJAX”,如果你担心服务器的性能和带宽使用。

顺便提一下,REDIS 看起来非常适合处理这种内存中的数据结构。

2

你提到的数据库表会给你的服务器带来负担,但如果你想记录这些请求,可能还是有用的。

使用像memcached或者AMQP服务器这样的东西,可能会让你的性能更好。如果你愿意的话,还可以使用更高效的键值存储,比如东京柜子(Tokyo Cabinet)或东京暴君(Tokyo Tyrant)。

撰写回答