如何使用 flask-socketio 将消息从烧瓶路由发送到套接字
How can I send a message from a flask route to a socket using flask-socketio
我想实现以下场景:
- 用户浏览我们的网站
- 用户输入一个比特币地址。
- 为服务器创建一个 websocket,传递地址。
- 服务器注册一个callback with Blocktrail
- 当触发回调时(Blocktrail 看到了一笔付款),我们会向浏览器发回一条消息。
- 用户正在浏览的页面已更新以显示收到的消息
我正在使用 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)
我想实现以下场景:
- 用户浏览我们的网站
- 用户输入一个比特币地址。
- 为服务器创建一个 websocket,传递地址。
- 服务器注册一个callback with Blocktrail
- 当触发回调时(Blocktrail 看到了一笔付款),我们会向浏览器发回一条消息。
- 用户正在浏览的页面已更新以显示收到的消息
我正在使用 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)