Flask SocketIO 网络应用程序拒绝接受来自 python 文件的连接

Flask SocketIO web app refuses to accept connections from python file

我正在尝试使用网络套接字将一些数据发送到 Flask 应用程序。从来没有做过这样的事情所以我可能做错了但到目前为止我还不能接受一个连接。

目前我有 2 个 python 个文件,server.pyclient.py

server.py 启动 flask 服务器和 web 套接字,然后 client.py 应该可以连接到它,发送一条消息,打印到服务器控制台,然后服务器应该将该消息回显到客户端接收的位置并打印到客户端控制台。

但是现在我在客户端尝试连接时遇到 Handshake status 400 BAD REQUEST 错误。

这是我使用的代码:

server.py :

from flask import Flask, render_template
from flask_socketio import SocketIO

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

@app.route('/')
def sessions():
    return "Hello World"

@socketio.on('message')
def handle_my_custom_event(mes):
    print('received my event: ' + str(mes))
    socketio.emit('my response', mes)

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

client.py :

import websocket

websocket.enableTrace(True)
ws = websocket.create_connection("ws://localhost:5000")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result = ws.recv()
print("Received '%s'" % result)
ws.close()

我认为 server.py 文件有问题,但是,我一直在处理 Flask-SocketIO docs 并且它与他们的入门示例几乎相同。但是话又说回来,我对此也不太了解,所以我不知道问题出在哪里。

感谢任何帮助,谢谢!

问题出在你的客户身上。 Websocket 和 socket.io 不一样,socket.io 协议 可以 在底层使用 websockets 但你不能只用 websocket 客户端连接到 socket.io 服务器.

您要使用的是socket.io client

如果您不介意,我强烈建议您使用 FastAPI instead of flask. It's much simpler, faster and have much better documentation. 您可以找到使用 FastAPI 的 websocket 服务器和客户端的完整有效示例