我想让网站上的一个用户可以聊聊我的Django网站上的另一个用户。我希望被请求者获得一个实时框,上面写着:“你想聊聊吗?”
以下客户端轮询方法如何发声:
user1单击users2昵称,为某些/消息/请求生成POST请求,这将在数据库中创建类型为CHAT_REQUEST的消息。同时,user2浏览器上的Javascript片段反复查询服务器以获取消息更新。当它收到CHAT_REQUEST类型的消息时,它会打开一个弹出窗口...
这种方法的问题似乎是数据库访问。
如果客户端每10秒轮询一次,并且100个用户打开浏览器窗口,那么每秒就会有10个数据库请求。
将这些消息存储在数据库中,而不是存储在Django RAM或会话信息中会更好吗?或者这个数据库表是否会使用PostgreSQL缓存在RAM中,并且检索速度快?
答案 0 :(得分:2)
如您所说,用于此的数据库表会给您的服务器带来负担,但如果您想出于任何原因保留这些请求的记录,这可能会很有用。
使用memcached或AMQP服务器之类的东西可能会提供更好的性能。如果您愿意,您甚至可以使用更高性能的键值商店,如Tokyo Cabinet / Tokyo Tyrant。
答案 1 :(得分:1)
如果您担心服务器性能和带宽使用情况,我建议您寻找“COMET like”通信而不是“类似AJAX”。
顺便说一下,REDIS看起来非常适合处理那种内存中的数据结构。