2017-01-16 200 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

噢,這就是我不太明白的,謝謝! –