2016-04-22 13 views
0

私はFlaskサーバーでsocket.ioクライアントからデータを取得したいと考えています。私の設定は:socket.ioを使ってFlaskで複数のクライアントを接続するには?

  1. です。クライアント1はサーバー上で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を取得できます。だから、例えば、あなたのアプリケーション固有のデータに付加されたこれらのセッションIDを記録し、接続ハンドラを書くことができ、その後、あなたは、特定のクライアントに何かを送信する場合、このような何か:

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

ここroom引数は、メッセージを送信する部屋を指定します。すべてのユーザーには、セッションIDで指定された既定の会議室があります。

関連する問題