烧瓶网络套接字未连接

问题描述

我正在尝试使用 Flask-SocketIO(5.0.1) 连接烧瓶(1.1.2)中的 websocket,但它给 websocket url 400 错误。我正在使用 anaconda 虚拟环境。

from flask import Flask,render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@app.route('/')
def stock_view():
   return render_template('index.html')

@socketio.on('message')
def handle_message(data):
    print('received message: ' + data)

if __name__ == '__main__':
    socketio.run(app)

#########    index.html  #########
<html>
<head>
</head>
<body>
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
    var socket = io();
    socket.on('connect',function() {
        socket.emit('my event',{data: 'I\'m connected!'});
    });
</script>
</body>
</html>

我的 requirements.txt 是 - amqp==5.0.3,bidict==0.21.2,certifi==2020.12.5,click==7.1.2,dnspython==1.16.0,eventlet==0.30.0,Flask==1.1.2,Flask-SocketIO==5.0.1,gevent==21.1.1,gevent-websocket==0.10.1,greenlet==1.0.0,importlib-Metadata==3.4.0,itsdangerous==1.1.0,Jinja2==2.11.2,kombu==5.0.2,MarkupSafe==1.1.1,python-engineio==4.0.0,python-socketio==5.0.4,six==1.15.0,typing-extensions==3.7.4.3,vine==5.0.0,Werkzeug==1.0.1,zipp==3.4.0,zope.event==4.5.0,zope.interface==5.2.0

解决方法

这是因为版本兼容性,你应该将你的 Python-socketIo 版本降级到 3,它可以在 Js 中使用 SocketIo 版本 1,或者将你的 Js 客户端 SocketIo 版本升级到 3,它可以与 Python-SocketIo 5 一起使用。