4

与我的案例最接近的示例是 Django ajax 聊天应用程序。房间需要保留一个活跃用户列表。除了在聊天中显示该用户列表外,给定房间可能有最大数量的活跃​​用户;如果没有空间,需要阻止新用户进入。

目前,我有聊天客户端页面通过 ajax 每秒调用一次投票视图。投票视图返回房间的文本。我认为 poll 也可以执行某种类型的 ping - 将用户添加到 Room 对象上的 active_user M2M 字段(到目前为止,我已经完成了所有这些)。我接下来需要的是在某种超时后将用户从该 active_user 列表中删除。

我想有两种方法可以做到这一点,我想知道对于需要精确到秒(或十/十五秒)的应用程序来说,哪种方法更有效:

  • 在这个线程中使用 cookie/会话/中间件(但在我看来,这种方法不适用于即时信息
  • 另一个模型,例如一个明确的 Users_Rooms 'through' 表,其中包含一个 datetime 字段,用于在创建时更新时间以及每次 ping 之后,并编写一些函数来清理旧的

这就是我能想到的。我只是想弄清楚每个房间的每个用户每秒都点击 mySQL 是否是一个好主意,并且想知道那一秒是否确实是该任务的最佳选择。谢谢!

4

1 回答 1

3

我会使用会话并将最后一次 ping 存储datetime为会话参数。不要担心数据库命中,如果在某个时候你会觉得你得到了太多,只需将你的会话存储切换到缓存

使您的应用程序对缓存刷新具有健壮性。

我的一个朋友曾经在一个非常标准的虚拟专用服务器上托管一个相对流行的基于 django 的社交网络游戏,他花了一段时间才被迫切换到基于缓存的会话。

于 2011-11-10T04:24:19.443 回答