我想要实现以下场景:
我使用webhooks from the Blocktrail API来"听"一个事件,是在地址上接收硬币。
现在,当事件发生时,API会对我的URL执行POST。这应该向使用socket.io连接到我的服务器的浏览器发送一条消息(例如'在区块链上看到的付款')
所以问题是,
如何使用flask-socketio
从路由发送消息到套接字伪代码:
@app.route('/callback/<address>')
def callback(id):
socketio.send('payment seen on blockchain')
@socketio.on('address',address)
def socketlisten(address):
registerCallback(address)
答案 0 :(得分:5)
我将使用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)