flask-SocketIO 客户端使用原生 WebSocket 不能成功连接,但使用 socket.io 却能正常连接?

2018-07-05 18:43:34 +08:00
 Akikiki

Python 2.7 使用 flask_socketio(3.0.1) 时,浏览器控制台下用原生

var socket = new WebSocket("ws://127.0.0.1:5000/char")

错误信息如下:

VM167:1 WebSocket connection to 'ws://127.0.0.1:5000/chat' failed: Error during WebSocket handshake: Unexpected response code: 200

引入 socket.io

socket = io.connect('ws://127.0.0.1:5000/chat')

查看 socket 的 connected 属性显示为 true

flask_socketio 的 git 地址: https://github.com/miguelgrinberg/Flask-SocketIO

是不是只能使用 socket.io 创建 client 进行连接?给的 demo 也都是使用 socket.io

求踩过坑的朋友指点一下,谢谢!

8439 次点击
所在节点    Python
31 条回复
baelish
2018-07-05 21:01:47 +08:00
文档中提到 “ Unofficial clients may also work, as long as they implement the Socket.IO protocol ”. 所以只有实现 socket.io 协议的客户端可以连, 直接用 WebSocket 是不行的。
momocraft
2018-07-05 21:06:07 +08:00
socket.io 连不着时会 fallback 到 http
wwqgtxx
2018-07-05 23:12:37 +08:00
其实楼上说的都不完全,socket.io 本身是一套私有协议,但是他可以基于 http polling/flash socket/websocket 等等通道进行传输,其实直接用原生的 websocket 去连接 socket.io 的服务器也不是不可以,但是实际操作的步骤就和你直接用 tcp 连接一个 http server 一样,你需要自行完成 socket.io 的握手步骤
hand515
2018-07-06 09:11:56 +08:00
&transport=polling 基本就是用了 polling 模式,基于 http 长轮询,并不是 ws
BOYPT
2018-07-06 10:13:48 +08:00
websocket 只是 socket.io 的其中一种工作方式。
xiaoheijw
2018-07-06 12:31:15 +08:00
flask-sockerio 是假的 websocket,建议用 tornado
wwqgtxx
2018-07-06 18:44:56 +08:00
@xiaoheijw flask-socketio 是真的 websocket 好吧
Akikiki
2018-07-25 17:37:57 +08:00
Akikiki
2018-07-25 17:38:39 +08:00
看到了这个。。。 作者自己回答了,so sad!
kayseen
2019-12-14 14:59:39 +08:00
@Akikiki
@golmic
你好,我现在也是在使用 python3.7 和 flask-socketio,在本地跑作者的 example 没问题,
但是我部署到服务器之后,在浏览器打开控制台就一直报错 400 错误,并且每一秒都会尝试重连,
请问你们当时部署到服务器的时候,nginx 是怎么配置的呢,求解答...
Akikiki
2019-12-15 18:15:40 +08:00
@kayseen nginx 关于 websocket 的配置可以上网搜一搜,一堆。flask-socketio 的支持和前端使用的库有关,原生的是不支持的。你可以找个测试网站试试就知道了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/468451

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX