2016-04-22 23 views
0

Ich möchte Daten in meinem Flask-Server von einem socket.io-Client abrufen. Meine Einstellung ist:Wie verbindet man mehrere Clients in Flask mit socket.io?

  1. Client1 ruft die Methode request_data auf dem Server auf.
  2. Die Methode request_data gibt dann das Ereignis 'client2' auf Client2 aus.

Ich habe die folgende Methode in meinem Kolben-Server:

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

Auf dem Client, der die Daten empfangen soll:

$(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") 
    }); 
    }); 

Aber ich kann nicht scheinen, um die Verbindung herzustellen client2. Was mache ich hier falsch?

Antwort

0

Wenn Sie die Funktion emit aufrufen, ohne explizit einen Empfänger anzugeben, wird das Ereignis an den Aufrufer zurückgesendet, der in Ihrem Beispiel der Client ist, der das Ereignis client1 an den Server gesendet hat. Wenn Sie an einen anderen Client senden möchten, müssen Sie die Sitzungs-ID (oder sid) kennen. In jedem Handler können Sie request.sid verwenden, um die Sitzungs-ID des Absenders abzurufen. So zum Beispiel, könnten Sie eine Verbindungshandler schreiben, die diese Session-IDs an Ihren anwendungsspezifischen Daten aufzeichnet, und dann, wenn Sie etwas zu einem bestimmten Client senden möchten, tun Sie etwas wie folgt aus:

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

Hier die room Argument gibt an, in welchen Raum die Nachricht gesendet werden soll. Alle Benutzer haben einen Standardraum, der mit ihrer Sitzungs-ID benannt ist.