与 flask-socketio 私聊

Private chat with flask-socketio

我正在为个人助理开发一个网络应用程序。当用户连接到站点时,我希望他们能够在在线时订阅他们的个人通知。我开始使用 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 的示例实现。

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()