0

Flask サーバーで socket.io クライアントからデータを取得したいと考えています。私の設定は次のとおりです。

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

しかし、client2 への接続を確立できないようです。ここで何が間違っていますか?

4

1 に答える 1

0

受信者を明示的に示さずに関数を呼び出すとemit、イベントは呼び出し元に返されます。この例では、client1イベントをサーバーに送信したクライアントです。

別のクライアントに送信する場合は、そのセッション ID (または ) を知る必要がありますsid。どのハンドラでも、 を使用request.sidして送信者のセッション ID を取得できます。したがって、たとえば、アプリケーション固有のデータに添付されたこれらのセッション ID を記録する接続ハンドラーを作成し、特定のクライアントに何かを送信する場合は、次のようにすることができます。

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

ここで、room引数は、メッセージを送信する部屋を指定します。すべてのユーザーには、セッション ID で名前が付けられたデフォルト ルームがあります。

于 2016-04-23T15:56:25.603 に答える