私はPlay2とJavaでWebSocketベースのソリューションを実装しようとしています。現在、私は同時実行管理にActor Modelを使用していません。代わりに、ちょうどhandling the WebSockets using callbacksです。Java - Play2 WebSocket実装にアクターが必要ですか?
問題は、サーバーが複数のクライアントにメッセージを「ブロードキャスト」できないことです。たとえば、クライアントを介してアクションがトリガーされた後に、すべてのアクティブなブラウザー・セッションが単純な通知を受け取る必要があります。代わりに、私はちょうど単一のクライアントセッションのためにこれをシミュレートすることができます。実際には、Ajaxの通常のリクエスト/応答のシナリオとして機能します。
私の推測は、Play2のWebSocketsソリューションです&単純なコールバックを持つJavaは、接続されたすべてのクライアントブラウザにメッセージをブロードキャストできません。
コールバックサーバコードで
public static WebSocket<String> heartUpdate() {
return new WebSocket<String>() {
public void onReady(final WebSocket.In<String> in,
WebSocket.Out<String> out) {
in.onMessage(new Callback<String>() {
@Override
public void invoke(String event) throws Throwable {
Product product = Product.find.byId(Long.decode(event));
// Other business stuff
out.write(entity.id + " " + decimalValue);
}
});
in.onClose(new Callback0() {
@Override
public void invoke() throws Throwable {
}
});
out.write(DELIM_USERID_REP);
}
};
}
ルートエントリ
GET /repsocket controllers.Application.heartUpdate
クライアント側
<script>
// Onto the WebSockets now
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket;
var socket = new WS("@routes.Application.heartUpdate.webSocketURL(request)");
var receiveEvent = function(event) {
alert(event.data);
// Notification badge visible with a common text
$('#notify').text(event.data);
$('#notify').addClass('visible');
}
$('#heart').click(function(e) {
e.preventDefault();
socket.send(@product.id);
});
socket.onmessage = receiveEvent;
</script>
上記の場合、アクションをトリガーするクライアントは、サーバーからメッセージを正常に受信するものであり、他のブラウザセッションは受信しません。
Javaの&を持つPlay2に対応したドキュメントを見つけることができませんでした。接続されているアクティブなクライアントとの一貫した通信を維持するためにアクターを強制的に使用することを示唆するWebSocket。
質問:Play2とJavaのWebSocketをアクターモデルで実装して、アクティブなクライアントセッションすべてにメッセージをブロードキャストする必要がありますか?
編集: 以下のスクリーンショットは、2つの有効なユーザー資格情報を使用してログインしている2つのブラウザの状態を示しています。
理想的には、サーバーからのWebSocketsの応答は、両方のブラウザで同じ通知バッジを作成する必要があります。
あなたにはどんなエラーがありますか? –
@nikponエラーはありません。サーバーからのメッセージは、1つのブラウザセッションに反映されているだけで、他の接続されているクライアントセッションではリクエストがトリガーされていませんでした。 – PopoFibo
ブラウザのセッションはどのように取得しましたか? –