gpt4 book ai didi

使用 redis 的 django 聊天应用程序 - 订阅后我如何/在哪里将 "listen"发送到消息?

转载 作者:可可西里 更新时间:2023-11-01 11:03:16 32 4
gpt4 key购买 nike

所以我正在尝试使用 django 编写一个聊天系统(我对实时系统比较陌生)。我做了一些研究 - 有很多选择(扭曲, Tornado 等)但现在我决定尝试使用 nginx 作为 web 服务器和 redis 的 pubsub。

聊天将同时在两个用户之间进行。

下面是我的想法:

  1. 在身份验证时,所有用户都发出 psubscribe chatctrl:*:。这实质上订阅了一个控制 channel 以建立始终需要的初始对话

  2. 当用户 u1 发起与用户 u2 的聊天时,我们

  3. 创建一个 channel ,说“chat:u1:u2”并订阅它。

  4. 用户 u1 向控制 channel chatctrl:u1:u2 发布消息:(u2 将收听的控制消息)有效地说“你想在 channel 上与我聊天吗?”chat:u1 :u2"?

  5. 用户 u2 应该收到此消息,订阅该 channel 并通过控制 channel (或新建立的 channel )上的另一条消息响应为是。
  6. session 已建立,两个用户都可以发布到同一 channel 并同时收听。

我的问题是:1.首先,以上是否有意义?如果不是,你会如何使用redis?2. 第二个问题是把loop放在哪里听消息。由于在没有消息时它将“阻塞”,因此它不能进入​​ View 或 View 访问的模型中。它应该在生成的线程中吗?如果是,我该如何在聊天 session 结束后取消订阅?

谢谢!

最佳答案

看我的回答here对于您描述的系统的示例。

在该代码中, View 生成一个订阅 Redis 的 Gevent greenlet,并通过 socket.io 将消息推送到客户端浏览器。

然后 View 会阻塞,直到通过 socket.io 收到消息,在聊天 session 期间重复。

希望对您有所帮助!

关于使用 redis 的 django 聊天应用程序 - 订阅后我如何/在哪里将 "listen"发送到消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774297/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com