应用场景
很多个用户利用 WebSocket
和 WebSocket Server
建立长连接, 另一边 Django Server
也会建立一个连接, 当某个用户向其他在线用户发送信息时, 这个 WebSocket Server
可以利用长连接跟用户通信, 告知用户有新消息, 让用户去 Django Server
拉取自己的新消息
上面这个就是大概的实现逻辑
重点是 服务器主动告知用户有新消息
WebSocket实现
服务端用 websockets
这个库, 有官方文档
大概基于以下思路:
- 一个用户(名)跟一个
websocket
连接对应, 保存在一个字典容器中 - 断开是删除这个
websocket
连接 - 服务器主动推消息时根据用户(名)来选择
websocket
连接
代码
1 | import asyncio |
测试
初始让两个用户(test, server)连接:
server告知test收到新消息, 服务器应向test发送一条提示消息:
看到已经收到信息了, 成功!
目前存在的问题
- 未知的性能, 应该不会很高
- 保存连接的方式并不安全
小结
其实代码这么少, 但是查websocket各种资料花了很多时间, 都在看有没有更好的实现, 更好的工具这样, 之前也没有接触过所以入手挺慢的
消息表的实现
主要是查询用户收到的消息(根据seq)并返回对应的 ContentID
, 并不复杂
代码:
1 | def messageTable(request, seq): |