Flask SocketIO:WebSocket握手期间出错

时间:2020-03-28 15:19:54

标签: flask websocket flask-socketio

我正在尝试使用Flask-SocketIO建立Websocket通信,但是在浏览器的控制台中,我不断收到“ WebSocket握手期间错误:意外的响应代码:400”。

我正在Raspbian操作系统上使用Chromium浏览器。

我已经安装了eventlet。

这是myapp.py的代码:

from flask import Flask, jsonify, request, render_template
from flask_socketio import SocketIO, emit

import eventlet
eventlet.monkey_patch()

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

clients = []

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

@io.on('connected')
def connected():
    clients.append(request.sid)
    print("client connected")
    print(request.sid)

@io.on('disconnect')
def disconnect():
    clients.remove(request.sid)
    print("client disconnected")
    print(request.sid)

if __name__ == '__main__':
    io.run(app, host='localhost', port=5000)

这是index2.html:

<html>
<br>

<head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
   <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
</head>

<br>

<body>

   <h2>HELLO</h2>

   <script>

      $("document").ready(function(){

         var socket = io.connect('http://localhost:5000');

         socket.on('connect', function() {
            socket.emit('connected');
         });

      });

   </script>

</body>

</html>

我用命令运行应用程序

python myapp.py

当我导航到http://localhost:5000时,我可以在网页上看到“ HELLO”,但没有收到“客户端已连接”消息,并且在浏览器的控制台中,错误消息“ WebSocket握手期间发生错误” :意外的响应代码:400英寸。

有人知道哪里出了问题吗?

1 个答案:

答案 0 :(得分:0)

由于某种原因,服务器拒绝连接。您可以做的就是在服务器中启用详细的日志记录:

io = SocketIO(app, engineio_logger=True, logger=True)

然后每次出现400错误时,您都会看到有关该错误的其他信息。

这400个原因很可能是跨域验证失败的原因。这不是唯一可能的原因,最常见于Web浏览器客户端。在这种情况下,您需要向您的Socket.IO服务器添加cors_allowed_origins选项。

相关问题