如何使用 flask-socketio 将消息从烧瓶路由发送到套接字

How can I send a message from a flask route to a socket using flask-socketio

我想实现以下场景:

我正在使用 webhooks from the Blocktrail API 到 "listen" 参加一个活动,即在地址上接收硬币。

现在,当事件发生时,API 对我的 URL 执行 POST。这应该向使用 socket.io(例如 'payment seen on blockchain')

连接到我的服务器的浏览器发送一条消息

所以问题是,

如何使用 flask-socketio 将消息从路由发送到套接字

伪代码:

@app.route('/callback/<address>')
def callback(id):
    socketio.send('payment seen on blockchain')

@socketio.on('address',address)
def socketlisten(address):
    registerCallback(address)

我将描述如何使用 Flask-SocketIO beta 版本 1.0b1 解决这个问题。您也可以使用 0.6 版本执行此操作,但它有点复杂,1.0 版本可以更轻松地处理单个客户端。

套接字连接的每个客户端都被分配了一个唯一标识它的会话 ID,即所谓的 sid。在套接字函数处理程序中,您可以通过 request.sid 访问它。此外,在连接时,每个客户端都被分配到一个私人房间,以会话 ID 命名。

我假设您通过回调收到的元数据可以让您识别用户。您需要的是获取该用户的 sid。一旦你拥有它,你可以将你的警报发送到相应的房间。

示例(关于如何将 sid 附加到地址的问题):

@app.route('/callback/<address>')
def callback(address):
    sid = get_sid_from_address(address)
    socketio.send('payment seen on blockchain', room=sid)

@socketio.on('address')
def socketlisten(address):
    associate_address_with_sid(address, request.sid)