如何使用flask-socketio从烧瓶路径向套接字发送消息

时间:2015-10-08 07:44:06

标签: python flask bitcoin flask-socketio

我想要实现以下场景:

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

我使用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)

1 个答案:

答案 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)