Pythonic/djangonic 以秒为单位处理用户超时的方式(如果需要的话,也可以以分钟为单位)

标签 python ajax django session django-middleware

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

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

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

  • 使用 cookies/session/middleware a la this thread (但是在我看来,这种方法不适用于即时信息
  • 另一种模型,例如带有日期时间字段的显式 Users_Rooms“直通”表,该表在创建时会更新,每次 ping 后都会更新,并编写一些函数来清除旧表

我能想到的就这些了。我只是想弄清楚是否每秒为每个房间的每个用户访问 mySQL 是一个好主意,并想知道那一秒钟是否确实是该任务的最佳选项。谢谢!

最佳答案

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

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

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

关于Pythonic/djangonic 以秒为单位处理用户超时的方式(如果需要的话,也可以以分钟为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8074588/

相关文章:

python - 在 Ubuntu 上安装 Kivy 时出错

python - 中断选择以添加另一个套接字以在 Python 中观看

php - 我可以用 Jquery $.post 得到一个数组吗?

javascript - 表未在 angularjs 中绑定(bind)

python - 类型错误 : 'class Meta' got invalid attribute(s): constraints

python - 在 django 中使用在 cpanel 上创建的电子邮件

python - 了解 Python Unicode 和 Linux 终端

jquery - 使用 jquery ajax 捕获 401 未经授权的 http 响应

Django Admin - 特定用户(管理员)内容

javascript - 即使应用 {% load static %},Django 静态文件也不会加载到 block 内容中