【问题标题】:Flask SocketIO web app refuses to accept connections from python fileFlask SocketIO Web 应用程序拒绝接受来自 python 文件的连接
【发布时间】:2021-12-25 15:36:52
【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

  • 始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图,不是指向外部门户的链接)(不是在 cmets 中)。还有其他有用的信息。

标签: python flask websocket flask-sockets


【解决方案1】:

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

你要使用的是socket.io client

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2021-08-12
    • 2018-11-22
    • 2017-07-18
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多