问题描述
我正在构建一个使用 Flask SocketIO 的应用程序。为了准确了解 StocketIO 包的工作原理,我使用此工作流程创建了一个简单的测试:
这是我的代码:
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
事件的事件处理程序应在您的客户端中实现。
当客户端发出时,服务器会接收它,因此在这种情况下,您将在服务器中实现一个事件处理程序。