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 。
求踩过坑的朋友指点一下,谢谢!
3
xiaoshenke 2018-07-05 18:47:44 +08:00 1
是的,只能用 socket.io 的 client。我这边本来有个 python ws 的需求,现在就是一直往后延。。。python 做 web 可能确实不是特别合适吧。。
|
4
Akikiki OP @xiaoshenke 这就有点蛋疼了。。。 好像 tornado 没有这个问题。
|
5
Akikiki OP |
6
golmic 2018-07-05 19:08:06 +08:00 via Android 1
@Akikiki 我用 Python Flask socketio 正常。Python 版本 3.7.0
|
7
hcymk2 2018-07-05 19:14:37 +08:00 1
F12 看下 network 里面 ws 有没有包。
|
10
Akikiki OP |
12
xiaoxinxiaobai 2018-07-05 19:22:58 +08:00 via Android 1
地址对了吗,flask socketio 就是那个作者写的 socketio 的 Py 版本,但是客户端应该不影响,只要是个 ws
|
13
Akikiki OP @xiaoxinxiaobai 两种连接方式使用的是同一个地址。我看到官方文档写了 *The client-side application can use any of the SocketIO official clients libraries in Javascript, C++, Java and Swift, or any compatible client to establish a permanent connection to the server.*,这算是声明了吗?
|
14
wheato 2018-07-05 19:31:46 +08:00 1
看看是不是 python 少了一个依赖,貌似叫 gevent ?如果 websoket 建立不了链接,socket.io 会自动退化到 polling 模式。
|
15
xiaoxinxiaobai 2018-07-05 19:35:00 +08:00 via Android
@Akikiki 咦,那有可能是,实现的不是单纯的 websocket 协议
|
16
Trim21 2018-07-05 19:37:46 +08:00 via Android 1
socket io 服务器和客户端虽然可以通过 websocket 连接 但是不能用浏览器原生的 websocket 连接 socket io 服务器 socket io 有自己自定义的一套协议。
|
18
Akikiki OP @wheato 这个是装了的,因为没装的时候会有 Warning。但是我用 flask_socketio 作者自己的 demo 跑,显示的链接也是 /socket.io/?EIO=3&transport=polling&t=1530787155994-0 这种
|
19
baelish 2018-07-05 19:44:47 +08:00 1
/char or /chat?
|
21
baelish 2018-07-05 21:01:47 +08:00
|
23
wwqgtxx 2018-07-05 23:12:37 +08:00
|
24
hand515 2018-07-06 09:11:56 +08:00
&transport=polling 基本就是用了 polling 模式,基于 http 长轮询,并不是 ws
|
26
xiaoheijw 2018-07-06 12:31:15 +08:00 1
flask-sockerio 是假的 websocket,建议用 tornado
|
28
Akikiki OP |
29
Akikiki OP 看到了这个。。。 作者自己回答了,so sad!
|
30
kayseen 2019-12-14 14:59:39 +08:00
|
31
Akikiki OP @kayseen nginx 关于 websocket 的配置可以上网搜一搜,一堆。flask-socketio 的支持和前端使用的库有关,原生的是不支持的。你可以找个测试网站试试就知道了
|