0

playframework で WS を理解するのに助けが必要です

コントローラーに次のコードがあります

public static WebSocket<String> sockHandler() {
return new WebSocket<String>() {
    // Se llama para establecer el WS

    public void onReady(WebSocket.In<String> in, WebSocket.Out<String> out) {

        //por cada evento recivido por el socket
        // Se regitra una llamada para el procesamiento de los eventos
        in.onMessage(new Callback<String>() {
            public void invoke(String event) {
                //Logger.info(event)
                System.out.println("este es el event "+event);

            } 
         });

        // write out a greeting
        out.write("Hola a todos");
    }
};

}

私の見解では、私は持っています:

<script type="text/javascript" charset="utf-8">

    $(function() {
        var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket
        var sock = new WS("@routes.Application.sockHandler().webSocketURL(request)")

        $('button.send').click(function() {
          console.log('entro al click');
          sendMessage();  
        }); 

        var sendMessage = function() {
            sock.send("llamando controller");
        }

        var receiveEvent= function(event) {
            $('.greeting').append(event.data);
            alert('entro');
        }

        sock.onmessage=receiveEvent;
    })

</script>

クライアントがアクションを送信するとき、すべてのクライアントでアラート('entro') を常に出力する必要があります。

英語ですみませんが、私はスペイン語を話します。

どうもありがとうございます

4

1 に答える 1

3

コードでは、実際に作成された Websocket (つまり、呼び出し元のクライアントとサーバーの間の実際の Websocket) への応答を記述しています。各クライアントには独自の Websocket があることを知っておく必要があります。

各クライアントに何かを書きたい場合は、作成されたすべての Websocket をどこかに永続化する必要があります。Play サンプルでは、​​コードの次の部分で実行されます。

すべての Websocket を含む Map (実際には出力があります):

Map<String, WebSocket.Out<JsonNode>> members = new HashMap<String, WebSocket.Out<JsonNode>>();

次に、登録はここで行われます:

members.put(join.username, join.channel);

そして、メッセージがすべてのクライアントに送信されます。これは、登録されているすべての Webscokets を反復処理することによって行われます。

for(WebSocket.Out<JsonNode> channel: members.values()) {

    ObjectNode event = Json.newObject();
    event.put("kind", kind);
    event.put("user", user);
    event.put("message", text);

    ArrayNode m = event.putArray("members");
    for(String u: members.keySet()) {
        m.add(u);
    }

    channel.write(event);
}
于 2012-08-30T20:02:46.477 に答える