2017-01-16 13 views
1

Я разрабатываю webapp для личного помощника. Пока пользователь подключен к сайту, я хочу, чтобы они могли подписаться на их личные уведомления, пока они в сети. Я ходил с этим 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() 

Но мой код, используя эту стратегию дает любое обновление для всех пользователей в сети. Используя флешку socketio, как я могу безопасно реализовать частный чат? Данные в обновлениях не являются ультрачувствительными, но, поскольку это уведомления, которые пользователь устанавливает, это обычно личное. Благодарю. Примечание: В моем исследовании по этому вопросу я натолкнулся на что-то, используя socketid, чтобы отправить сообщение только определенному отправителю, но я не смог найти пример реализации этого, используя flask-socketio.

ответ

1

Функция socketio.emit() передается всем пользователям по умолчанию. Чтобы адресовать сообщение одному пользователю, вы должны установить комнату в комнату желаемого пользователя, которая называется после идентификатора сеанса пользователя. Вот пример:

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

О, вот что я не совсем понял, спасибо! –