我需要帮助来理解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')。
请原谅我的英语,但我会说西班牙语。
非常感谢
答案 0 :(得分:3)
在您的代码中,您正在编写对实际创建的Websocket的响应(即调用客户端和服务器之间的实际Websocket)。你必须知道每个客户都有他自己的Websocket。
如果要为每个客户端编写内容,则必须将所有创建的Websocket保留在某处。在Play sample中,完成了以下代码部分:
A Map containing all Websockets(实际输出):
Map<String, WebSocket.Out<JsonNode>> members = new HashMap<String, WebSocket.Out<JsonNode>>();
然后注册完成here:
members.put(join.username, join.channel);
并且会向所有客户发送一条消息,该消息由iterating through all registered 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);
}