9

我想实现以下场景:

  • 用户浏览我们的网站
  • 用户输入一个比特币地址。
  • 向服务器创建一个 websocket,并传递地址。
  • 服务器向 Blocktrail注册回调
  • 当触发回调(Blocktrail 看到付款)时,我们会向浏览器发送一条消息。
  • 更新用户正在浏览的页面以显示收到的消息

我正在使用Blocktrail API 中的 webhook来“监听”一个事件,即接收地址上的硬币。

现在,当事件发生时,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)
4

1 回答 1

7

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

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

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

sid示例(关于如何将 a 附加到地址的一些挥手致意):

@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)
于 2015-10-08T16:22:09.833 回答