2016-04-22 89 views
0

我想從socket.io客戶端獲取Flask服務器中的數據。我的設置是:如何使用socket.io連接Flask中的多個客戶端?

  1. Client1調用服務器上的方法request_data。
  2. 方法request_data然後在Client2上發出'client2'事件。

我有以下的方法在我的燒瓶服務器:

@socketio.on('client1') 
def test_message(message):      
    emit('client2', {'data': 'testdata'}) 

在應該接收數據的客戶端:

$(document).ready(function(){ 
    var socket = io.connect('http://' + document.domain + ':'+location.port); 
    socket.on('connect', function() { 
     socket.emit('my event', {data: 'I\'m connected!'}); 
    }); 

    socket.on('client2', function(msg) { 
     console.log(msg.data) 
     console.log("here") 
    }); 
    }); 

但我似乎無法建立到客戶端2連接。我在這裏做錯了什麼?

回答

0

當您在沒有明確指示收件人的情況下調用emit函數時,事件將發回給調用者,在您的示例中,該調用者是發送client1事件到服務器的客戶端。

如果你想發射到不同的客戶端,你需要知道它的會話ID(或sid)。在任何處理程序中,您可以使用request.sid來獲取發件人的會話標識。因此,例如,你可以寫一個連接處理程序,記錄連接到你的應用程序特定的數據,這些會話ID,然後當你想送東西給特定客戶,做這樣的事情:

emit('client2', {'data': 'testdata'}, room=get_sid_for_user(username)) 

這裏room參數指定將消息發送到哪個房間。所有用戶都有一個以會話ID命名的默認房間。

相關問題