2017-01-16 110 views
1

我正在开发一个个人助理的webapp。当用户连接到该网站时,我希望他们能够在他们联机时订阅他们的个人通知。我去有关与socketio和瓶socketio这样做的,我认为我可以只使用多线程,就像这样: 与烧瓶socketio私人聊天

def update_loop(): 
    while my_update_condition: 
     if my_update_exists: 
      socketio.emit("update", my_update) 

@socketio.on("get_updates") 
def get_updates(data): 
    '''Websocket thread for getting updates''' 
    socketio.emit("debug", {"value": "Starting update loop"}) 
    update_thread = threading.Thread(target=update_loop) 
    update_thread.start() 

但是使用这个策略,我的代码提供任何更新应用到所有用户在线。使用瓶塞,我如何安全地实现私人聊天?更新中的数据不是非常敏感的,但是,由于它是用户设置的通知,所以通常是个人的。谢谢。 注意:在我对此的研究中,我发现了一些使用socketid来发送消息给特定的发件人,但我找不到使用flask-socketio的示例实现。

回答

1

socketio.emit()函数默认广播给所有用户。要向单个用户发送消息,必须将房间设置为所需的用户房间,该房间以用户的会话ID命名。这里是一个例子:

def update_loop(sid): 
    while my_update_condition: 
     if my_update_exists: 
      socketio.emit("update", my_update, room=sid) 

@socketio.on("get_updates") 
def get_updates(data): 
    '''Websocket thread for getting updates''' 
    socketio.emit("debug", {"value": "Starting update loop"}) 
    update_thread = threading.Thread(target=update_loop, args=(request.sid,)) 
    update_thread.start() 
+0

这就是我最终做的,但我不确定它是否安全。不能有任何未经身份验证的用户连接到该房间? –

+1

客户端无法连接到任何房间,它是客户端分配给客房的服务器。 – Miguel

+0

噢,这就是我不太明白的,谢谢! –