私人聊天与烧瓶socketio

时间:2017-01-16 18:22:01

标签: python flask websocket socket.io flask-socketio

我正在为个人助理开发一个webapp。当用户连接到该站点时,我希望他们能够在他们在线时订阅他们的个人通知。我用socketio和flask 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()

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

1 个答案:

答案 0 :(得分: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()