Flask SocketIo:测试事件

问题描述

我正在构建一个使用 Flask SocketIO 的应用程序。为了准确了解 StocketIO 包的工作原理,我使用此工作流程创建了一个简单的测试:

  1. HTTP Get 请求触发我的偶数
  2. 当我收到这个请求时,我用函数 test() 用 SocketIO 发出事件
  3. 我尝试使用函数 handle_my_custom_event() 读取此事件发出。

这是我的代码

app = Flask(__name__)
api = Api(app)
socket = SocketIO(app,logger=True,engineio_logger=True)

@app.route('/')
def test():
    data = {'city': "new york",'number': 10}
    json_data = json.dumps(data)
    socket.emit("test_event",json_data)
    return {"message": "message send correctly"},200


@socket.on('test_event')
def handle_my_custom_event(json):
    print('received json: ' + str(json))
    return 'one',2


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

我向本地主机执行 HTTP 请求:http://127.0.0.1:5000/ 这触发了我的函数测试,它发出我的事件(在终端中,我有消息“向所有 [/]”发送事件“test_event”,因此事件被发出)

通常,我的 handle_my_custom_event 应该被这个事件触发,因为它监听“test_event”,但什么也没发生,终端也没有打印任何东西(我没有“收到的 json:xx”)

所以我认为这个事件不是很好的倾听方式,但在那种情况下,如果你知道为什么,它真的会对我有帮助

谢谢

解决方法

您误解了 Socket.IO 的工作原理。当您在服务器中调用 emit() 时,您正在向您的客户端发送信息。您发出的此 test_event 事件的事件处理程序应在您的客户端中实现。

当客户端发出时,服务器会接收它,因此在这种情况下,您将在服务器中实现一个事件处理程序。