当前位置: 首页 > news >正文

Python实现一对多WebSocket发送给指定多个客户端

在一对多的WebSocket场景下,如果你想要向特定的多个客户端发送消息,而不是广播给所有客户端,你需要维护一个能够标识每个客户端的方式,比如使用用户名或者客户端ID。这样,你就可以根据需要选择向哪些客户端发送消息。

import asyncio
import websockets# 使用字典存储每个客户端的连接,键为客户端ID
connected_clients = {}async def send_to_clients(client_ids, message):"""向指定的客户端ID列表发送消息"""tasks = []for client_id in client_ids:if client_id in connected_clients:tasks.append(connected_clients[client_id].send(message))if tasks:await asyncio.wait(tasks)async def handler(websocket, path):"""处理单个客户端的连接"""# 假设客户端在连接时发送其ID作为第一条消息client_id = await websocket.recv()print(f"New client connected with ID: {client_id}")# 将客户端ID与连接关联起来connected_clients[client_id] = websockettry:async for message in websocket:print(f"Received from {client_id}: {message}")# 这里可以添加逻辑判断是否需要向特定客户端发送消息# 例如,向ID为'client2'和'client3'的客户端发送消息await send_to_clients(['client2', 'client3'], f"Forwarded to you from {client_id}: {message}")finally:# 当客户端断开连接时,从字典中移除if client_id in connected_clients:del connected_clients[client_id]# 开始WebSocket服务器
start_server = websockets.serve(handler, "localhost", 8765)asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Window10下安装WSL-Ubuntu20.04
  • 找到并留住最佳员工
  • 掌握异常处理的艺术:LangChain中的错误与异常管理策略
  • 深度学习-2-TensorFlow和PyTorch深度学习框架的选择
  • Qt常用快捷键
  • 云计算【第一阶段(29)】远程访问及控制
  • OpenCV 寻找棋盘格角点及绘制
  • 构建GitLab代码私有仓库
  • Python数据分析案例51——基于K均值的客户聚类分析可视化
  • virtualbox的ubuntu默认ipv4地址为10.0.2.15的修改以及xshell和xftp的连接
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • 深层神经网络示例
  • centos环境启动/重启java服务脚本优化
  • 神经网络以及简单的神经网络模型实现
  • Matplotlib库学习之mpl_toolkits.mplot3d.Axes3D函数
  • 深入了解以太坊
  • php的引用
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • EventListener原理
  • IndexedDB
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Next.js之基础概念(二)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PHP 的 SAPI 是个什么东西
  • 编写高质量JavaScript代码之并发
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 第十八天-企业应用架构模式-基本模式
  • 力扣(LeetCode)56
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 数据仓库的几种建模方法
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​Java基础复习笔记 第16章:网络编程
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​马来语翻译中文去哪比较好?
  • ​如何防止网络攻击?
  • # SpringBoot 如何让指定的Bean先加载
  • #QT 笔记一
  • #预处理和函数的对比以及条件编译
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)Nginx简介和安装教程
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计高校学生选课系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)、python程序--模拟电脑鼠走迷宫
  • (转)原始图像数据和PDF中的图像数据
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)