【问题标题】:Django Channels: How to keep socket aliveDjango Channels:如何让套接字保持活动状态
【发布时间】:2019-12-05 10:26:56
【问题描述】:
我正在尝试使用 django 频道和模板来实现身份验证。我知道官网有一个认证部分,但是我有一个关于socket的问题,它是在客户端通过模板创建的。
据我了解,django模板是多页应用,所以如果我在login.html创建一个socket,这个socket会在main.html断开连接,我已经看到了。
即使我导航到不同的页面,有没有办法让套接字保持活动状态?
【问题讨论】:
标签:
django
websocket
django-channels
【解决方案1】:
您不能在页面之间保持套接字处于活动状态。 socket 的连接是持久的,直到它从客户端或服务器端关闭。
当您从一页 login.html 移动到另一页 main.html 时,连接已关闭,您需要恢复它。
socket的工作模式:
Socket 是一个持久连接,您可以在其中进行实时通信。
Room 由一组 Sockets 组成。
当 Socket 订阅 Room 时,它可以监听该 Room 中发生的所有通信>。也就是说,当有人在那个房间发送数据时,所有监听它的套接字都会接收到它。
所以,你保持这个 Room 细节是唯一的,例如:对于user1,你可以有room1。
当user1 尝试使用socket1 连接到服务器时,您对他进行身份验证并将他的socket1 订阅/注册到room1。
同样,当您将页面更改为main.html 时,您会创建socket2 并根据用户身份再次订阅room1。