使用django实现stackoverflow的通知系统

时间:2014-05-15 02:10:52

标签: django notifications

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

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

用户场景可能如下所示:

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

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

1 个答案:

答案 0 :(得分:0)

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

显示通知是一种双向通信。服务器通知客户端有新的通知可用。客户端向用户显示此通知,然后当用户与该通知进行交互时,客户端会通知服务器该通知已被读取,因此下次用户加载页面时,只会显示未读的通知。

涉及一些步骤。

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

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

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

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

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