问题描述
在按照 李辉 老师的 《Flask Web开发实战》 练习项目时,在网络聊天室项目使用socket.io进行WebSocket通信时,发现客户端和服务器端无法进行消息发送,服务器端的GET前请求一直报错:"GET /socket.io/?EIO=3&transport=polling&t=N_l1L5D HTTP/1.1" 400 - 。 一直往上翻日志发现在服务器启动时有提示: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)
解决思路
根据提示推测可能是Flask-socketio版本和使用的socket.io js客户端版本不匹配导致的。 查看李辉老师原项目github的代码发现,其当时使用的Flask-SocketIO版本为3.0.1,对应的socket.io客户端版本是3.x的版本。
而我在练习时直接将static/js中的文件复制到了项目中,导致新的Flask-SocketIO(5.1.1)与js版本客户端不匹配,从而二者不能正常通信。 Flask-socktio兼容版本说明:
问题解决
根据官方给定的兼容版本,从socket.io官网CDN下载最新的4.4.1版本js文件,python-engineio使用4.3.1版本。然后再启动项目二者就可以进行通信了。
不过发现项目启动时,还是会有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) 报错信息,但是不会再在日志中一直弹出GET请求的400错误,在客户端发送请求,服务器端也可以正常接收处理了。
可能是因为在Flask的研发环境没有使用合适的异步服务器导致的,flask自带werkzeug服务器只支持长轮询并不支持websocket。
还需后续跟进问题……
|