多进程服务器转发客户端消息,python-socketio 多进程部署

本文介绍如何使用Python的socketio库在多进程中实现服务器间的消息转发。通过集成Redis作为消息队列,当客户端连接到任一服务器进程时,消息能够正确广播到其他连接的客户端。详细讲解了服务端的配置和客户端的交互示例。
摘要由CSDN通过智能技术生成

实现原理

当使用多进程的时候。多个socketio服务器通过消息队列来沟通之间的客户端sid。若发现该sid在自己的连接中。就由该进程处理发送给其下面连接的客户端

详细的可以看这里

socket.io要实现多进程以及广播,房间等功能,势必需要接入一个redis之类的消息队列,进而socket.io的emit会调用对应队列管理器pubsub_manager的emit方法,比如用redis做消息队列则最终调用 redis_manager中的_publish()

方法通过redis的订阅发布功能将消息推送到flask_socketio频道。另一方面,每个进程在初始化时都订阅了 flask_socketio频道,而且都有一个协程(或线程)在监听频道中是否有消息,一旦有消息,就会调用pubsub_manager._handle_emit()方法对本机对应的socket发送对应的消息,最终是通过socket.io服务器的_emit_internal()方法实现对本机中room为sid的所有socket发送消息的,如果room为None,则就是广播,即对所有连接到本机的所有客户端推送消息。

作者:ssjhust

链接:https://juejin.cn/post/6844903632819716110

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

服务端实现

设定client_manger即可

mgr = socketio.AsyncRedisManager('redis://127.0.0.1:6379/2')

sio = socketio.AsyncServer(async_mode='asg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值