已解决
python使用websocket实现多端数据同步,多个websocket同步消息,断开链接自动清理
来自网友在路上 160860提问 提问时间:2023-09-28 01:52:03阅读次数: 60
最佳答案 问答题库608位专家为你答疑解惑
我使用的是flask_sock这个模块,我的使用场景是:可以让数据多端实时同步。在游戏控制后台和游戏选手的ipad上都可以实时调整角色的技能和点数什么的,所以需要这样的一个功能来实现数据实时同步。
下面是最小的demo案例:
from flask import Flask
from flask_sock import Sockapp = Flask(__name__)
sock = Sock(app)
# 创建全局的ws对象数组
ws_list = []
ws_closed = []@app.route('/')
def index():return "你好,世界"@app.route('/ws')
def websocket():return """<!doctype html><html><head><title>Flask-Sock Demo</title></head><body><h1>Flask-Sock Demo</h1><div id="log"></div><br><form id="form"><label for="text">Input: </label><input type="text" id="text" autofocus></form><script>const log = (text, color) => {document.getElementById('log').innerHTML += `<span style="color: ${color}">${text}</span><br>`;};const socket = new WebSocket('ws://' + location.host + '/echo');socket.addEventListener('message', ev => {log('<<< ' + ev.data, 'blue');});document.getElementById('form').onsubmit = ev => {ev.preventDefault();const textField = document.getElementById('text');log('>>> ' + textField.value, 'red');socket.send(textField.value);textField.value = '';};</script></body></html>"""def handle_sync(data, self):# 同步各端ws消息for ws in ws_list:if not ws.connected:ws_closed.append(ws)elif data and ws != self:ws.send(data)# 删除已断开的链接for cl in ws_closed:ws_list.remove(cl)ws_closed.clear()print(f"live num: {len(ws_list)}, done num: {len(ws_closed)}")@sock.route('/echo')
def echo(self):global ws_listws_list.append(self)# 同步消息和关闭ws clearhandle_sync(None, self)while True:print(f"global ws list: {len(ws_list)}")# 判断是断开连接还是还在链接data = self.receive()self.send(data)# 同步消息和关闭ws clearhandle_sync(data, self)if __name__ == '__main__':app.run(host="0.0.0.0", port=8989)
当有ws链接进来的时候,有一个全局的数组存储所有的 ws_list 存储活着的websocket。ws_closed用来存储断开连接的ws信息,当每次建立新的链接或者一个ws收到消息,就检测每个链接的状态,并将信息同步到活着的所有ws链接。
程序启动之后,访问:http://192.168.110.196:8989/ws
就能建立一个ws链接,我创建了三个链接,当我在第一个上面发送消息的时候,后面两个就能将消息同步展示出来。任意一个页面发送数据,其他页面都会实时同步所有消息。
效果:
同步页面:
查看全文
99%的人还看了
相似问题
- 使用WalletConnect Web3Modal v3 链接钱包基础教程
- MongoDB——golang操作(链接,CURD,聚合)
- HTML 超链接 a 标签
- WSL2安装ubuntu及修改安装位置,设置Ubuntu开机启动链接ssh服务
- Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献
- 【Mysql】复合查询详解+实战操作(多表查询、自链接、子查询等)
- 如何将vscode和Linux远程链接:
- 轻松搭建短域名短链接服务系统,可选权限认证,并自动生成证书认证把nginx的http访问转换为https加密访问,完整步骤和代码
- 批量替换WordPress文章内图片链接
- 什么是BT种子!磁力链接又是如何工作的?
猜你感兴趣
版权申明
本文"python使用websocket实现多端数据同步,多个websocket同步消息,断开链接自动清理":http://eshow365.cn/6-14957-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 速冻品、预制菜商城小程序的作用有哪些
- 下一篇: 机器学习,深度学习