客户端正在使用不支持的Socket.IO或Engine.IO协议版本错误。

25

我正在尝试使用flask_socketio、socketIO_client和SOCKET.IO在树莓派4上运行Python客户端和服务器,但是我遇到了以下错误:

The client is using an unsupported version of the Socket.IO or Engine.IO protocols (further occurrences of this error will be logged with level INFO)
192.168.1.80 - - [05/Feb/2021 18:30:41] "GET /socket.io/?EIO=3&transport=polling&t=NTpTT-L HTTP/1.1" 400 219 0.000618

这是我目前的版本:

pi@raspberrypi:~/Desktop/EDAdataLogger $ npm list socket.io EDAdataLogger@ /home/pi/Desktop/EDAdataLogger └── socket.io@3.1.1

pi@raspberrypi:~/Desktop/EDAdataLogger $ npm list socket.io-client EDAdataLogger@ /home/pi/Desktop/EDAdataLogger └── socket.io-client@3.1.1

python-engineio==4.0.0
python-socketio==5.0.4
Flask==1.1.2
Flask-Session==0.3.2
Flask-SocketIO==5.0.1

我该如何定义JavaScript Socket.IO版本和Socket.IO协议修订版,以便一切都符合(https://pypi.org/project/python-socketio/)?

请问我该如何解决这个问题?谢谢。


3
连接URL表明您的Socket.IO客户端是版本1或版本2。它应该是版本3,以便与您安装的Python软件包兼容。如果您想要详细了解版本1和2,请在URL中发送EIO=3,而版本3则发送EIO=4 - Miguel Grinberg
你现在搞清楚了吗? - Bombosonic
7个回答

39

看起来SocketIO存在一些向后兼容性问题。您可以卸载python-engineiopython-socketio(为了安全起见,也可以卸载Flask-SocketIO),然后重新安装较低版本。

对我有效的组合是:

Flask-SocketIO==4.3.1
python-engineio==3.13.2
python-socketio==4.6.0

这个能兼容哪个版本的烧瓶? - undefined

23

为了解决版本不兼容问题,您可以运行以下 "升级" 命令:

pip install --upgrade python-socketio==4.6.0

pip install --upgrade python-engineio==3.13.2

pip install --upgrade Flask-SocketIO==4.3.1

谢谢你,Ravi!在我的 M1 Mac 上完美地解决了我的问题! - ChrisDanger

3

Flask-SocketIO 5.1.2、Python-EngineIO 4.3.2 和 Python-SocketIO 5.6.0

脚本来源于 "//cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.0/socket.io.js"

这对我有用。此错误是由于与 Python-EngineIO 相关的依赖项引起的。 之后,检查您的套接字请求是否显示类似于“GET /socket.io/?EIO=4&transport=websocket&sid=mJ1g8wm0didssJSiAAAA HTTP/1.1”的 EIO4 "200"。


2

请在此处检查 JS 客户端版本和 Socket.IO 服务器版本的兼容性:https://socket.io/docs/v4/client-installation/,并相应地升级 / 降级客户端 / 服务器版本。

您需要在服务器端安装以下模块:
Flask-SocketIO
python-engineio
python-socketio

您的客户端将具有以下 URL:
//cdnjs.cloudflare.com/ajax/libs/socket.io/

这是我使用的一个工作示例:

服务器端:
Flask-SocketIO==5.2.0
python-engineio==4.3.3
python-socketio==5.7.1
simple-websocket==0.7.0

客户端:
//cdnjs.cloudflare.com/ajax/libs/socket.io/4.2.0/socket.io.js


1
我的解决方法是使用socket.io版本而不是作为源的Cloudflare。

4
您的回答目前表述不清,建议您[编辑]并添加更多细节以帮助他人理解如何回答问题。您可以在帮助中心找到更多有关如何编写好答案的信息。 - Community

1

谢谢您的友善回答。您给我的方法已经提前完成了。尽管Java SocketIO使用了五天前发布的版本,但是同样的问题仍然存在。我会再次安装匹配Java Socket 1.x版本的软件包后进行测试。谢谢。 - moon se ji

1

我的解决方法是使用Socket IO本身作为源,而不是使用Cloudflare。

<script>src="https://cdn.socket.io/4.6.0/socket.io.min.js" integrity="sha384-c79GN5VsunZvi+Q/WObgk2in0CbZsHnjEqvFxC5DxHn9lTfNce2WW6h2pH6u/kF+" crossorigin="anonymous"</script>

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接