1

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

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

server.py启动烧瓶服务器和网络套接字,然后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 文档,它与他们的入门示例几乎相同。但是话又说回来,我对此也知之甚少,所以我不知道问题出在哪里。

感谢您提供任何帮助!

4

1 回答 1

3

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

您要使用的是socket.io 客户端

如果你不介意我强烈建议你使用FastAPI而不是烧瓶。它更简单、更快并且有更好的文档。在这里,您可以找到使用 FastAPI 的 websocket 服务器和客户端的完整且有效的示例

于 2021-12-25T18:54:54.157 回答