python-socketio搭配gunicorn运行提示WebSocket传输不可用该如何解决
问题原因
你当前使用python-socketio的WSGI模式搭配gunicorn运行服务,默认没有安装对应模式下的WebSocket支持依赖,服务只能降级使用长轮询模式运行,因此抛出该报错。
解决步骤
1. 安装缺失的WebSocket支持依赖,以下两种方案二选一即可
方案一(更推荐,适配性更强):使用eventlet作为运行时
执行命令安装依赖:
pip install eventlet
替换原有启动命令为:
gunicorn --worker-class eventlet -w 1 app:app
注意:eventlet单worker即可处理大量并发请求,新手阶段无需开启多worker,多worker场景需要额外配置跨进程消息代理才能正常使用Socket.IO的广播等功能
方案二:使用gevent + gevent-websocket
执行命令安装依赖:
pip install gevent gevent-websocket
替换原有启动命令为:
gunicorn --worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app
2. 可选版本兼容校验
你当前使用的Socket.IO客户端为3.x版本,需确保python-socketio服务端版本为v5.x以上才能保证协议兼容,如果修改完依赖后仍存在连接异常,可执行命令升级到兼容版本:
pip install "python-socketio>=5.0.0"
修改完成后重启服务,刷新页面即可消除该报错,WebSocket传输也会正常启用。
内容的提问来源于stack exchange,提问作者Milo Chen
相关产品推荐
相关产品推荐

