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

Den*_*ene 6 python flask bitcoin flask-socketio

我要实现以下情形:

  • 用户浏览我们的网站
  • 用户输入一个比特币地址。
  • 将向服务器创建一个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)
Run Code Online (Sandbox Code Playgroud)

Mig*_*uel 6

我将描述如何使用Flask-SocketIO beta版本1.0b1解决此问题。您也可以使用0.6版本来做到这一点,但是它有点复杂,1.0版本使寻址单个客户端更加容易。

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

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

示例(与如何将a附加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)
Run Code Online (Sandbox Code Playgroud)