2017-01-16 23 views
1

私はパーソナルアシスタント用のWebアプリケーションを開発しています。ユーザーはサイトに接続している間、オンラインにいる間に個人の通知に登録できるようにします。私は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() 

しかし、この戦略を使用して私のコードは、オンラインですべてのユーザーへのアップデートを提供します。フラスコのsocketioを使用して、プライベートチャットを安全に実装するにはどうすればよいですか?アップデートのデータは超高感度ではありませんが、ユーザーが設定した通知であるため、通常は個人的です。ありがとう。 注:これに関する私の研究では、socketidを使用して特定の送信者にメッセージを送信することがありましたが、flask-socketioを使用してこれを実装する例は見つかりませんでした。

答えて

1

socketio.emit()は、デフォルトですべてのユーザーにブロードキャストされます。 1人のユーザーにメッセージを送信するには、そのユーザーの部屋の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

ああ、それは私がかなり理解していない、ありがとう! –

関連する問題