Websocket在playframework 2中向所有客户端发送数据
Posted
技术标签:
【中文标题】Websocket在playframework 2中向所有客户端发送数据【英文标题】:Websocket send data all client in playframework 2 【发布时间】:2012-08-30 17:32:55 【问题描述】:我需要帮助来理解 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')。
请原谅我的英语,但我会说西班牙语。
非常感谢
【问题讨论】:
你到底想达到什么目的?当用户发送内容时,每个连接的用户都应该打印 alert('entro') ? 没错,这就是我想要实现的目标 你看过样品吗?看到这个帖子:***.com/a/12203677/320180 看过例子,但是不明白akka的实现。最终决定答案的人是谁? 【参考方案1】:在您的代码中,您正在编写对实际创建的 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);
【讨论】:
以上是关于Websocket在playframework 2中向所有客户端发送数据的主要内容,如果未能解决你的问题,请参考以下文章
Playframework 2,Websockets 和 Session
Play Framework 2.3 和 javascript websocket 客户端库