使用django实现stackoverflow的通知系统

问题描述 投票:6回答:1

我见过像Notify panel similar to stackoverflow's这样的问题。它谈到了实现的客户端。

我正在寻找有关服务器部分和网络部分的信息(如何实时通知客户端)

用户场景可能如下所示:

  1. 用户a发生了一些事情
  2. 服务器为DB中的user-a创建一条消息(持久性):我正在使用django-activity-stream
  3. 服务器向用户a的浏览器发送(新的或最后10个)消息(当用户登录或事件发生时)
  4. 浏览器显示消息(Notify panel similar to stackoverflow's部分)
  5. 如果用户确认该消息(在SO中单击收件箱),则所有未见的消息都被标记为已读并记录在服务器中

我对以下步骤有疑问。

  • (3)不确定但可以使用https://github.com/stephenmcd/django-socketio
  • (4)问题的答案是客户端具有从服务器接收的json数据。 服务器是否为每个请求向用户发送消息? 客户端是否检查本地存储(我是新手到网络,为此目的,什么是一个好的本地存储?)并请求json数据,如果他没有在本地存储中?
  • (5)我应该如何实施这个seenunseen? django-activity-stream没有它们的概念。
django notifications
1个回答
0
投票

这可以通过使用django-channels轻松实现。因为您需要websockets以进行双向客户端服务器通信。

显示通知是双向通信。服务器通知客户端可用的新通知。客户端向用户显示此通知,然后当用户与通知交互时,客户端通知服务器已读取通知,因此下次用户加载页面时,仅显示未读通知。

涉及一些步骤。

  1. 您的服务器需要能够支持websocket通信。 django-channel将申请转换为ASGI。
  2. 创建一个可以向websocket发送和接收消息的websocket使用者。
  3. 当用户打开应用程序时,客户端会创建一个到服务器的websocket连接通道。
  4. 每当需要发送新通知时,服务器都会将消息发送到通道。
  5. 收到邮件后,客户端使用Javascript在网页上呈现通知。就像显示新消息图标一样,将新消息附加到消息列表等。

现在,完成了一部分。您的用户已收到通知。来到第二部分。

  1. 用户看到铃声图标或其他任何内容,然后单击它,他会看到通知详细信息(当客户端收到消息时,这是由js呈现的)。
  2. 用户点击通知/铃声图标。此时,客户端将向服务器发送通知,以便服务器可以更新所有通知的读取内容。

我创建了一个应用程序,在显示新消息时更新客户端。 Github link

您还可以参考类似的问题:https://stackoverflow.com/a/55656848/4186008

© www.soinside.com 2019 - 2024. All rights reserved.