Java AngularJS ngWebscoket不向所有用户发送消息
我正在使用ngWebsocket监听用户操作,并根据当前操作更新所有用户页面,而不仅仅是发送操作的页面 我用java做了一个终点,它捕捉所有动作并发送消息给所有打开的会话。但当我进行测试时,端点查找会话并向所有会话发送消息,但消息只会发送给发送操作的人 我的java代码像Java AngularJS ngWebscoket不向所有用户发送消息,java,angularjs,session,websocket,angularjs-scope,Java,Angularjs,Session,Websocket,Angularjs Scope,我正在使用ngWebsocket监听用户操作,并根据当前操作更新所有用户页面,而不仅仅是发送操作的页面 我用java做了一个终点,它捕捉所有动作并发送消息给所有打开的会话。但当我进行测试时,端点查找会话并向所有会话发送消息,但消息只会发送给发送操作的人 我的java代码像 @OnMessage public String onMessage(Session session, String message) { Gson gson = new Gson(); SocketMessa
@OnMessage
public String onMessage(Session session, String message) { Gson gson = new Gson();
SocketMessage sm = gson.fromJson(message, new SocketMessage().getClass());
if (sm.getEvent().equals("teklif")) {
Set<Session> openSessions = session.getOpenSessions();
for (Session openSession : openSessions) {
try {
openSession.getBasicRemote().sendText("{\"event\":\"teklif\",\"data\":" + sm.getData() + "}");
} catch (Exception ioe) {
System.out.println(ioe.getMessage());
}
}
}
return message;
}`
它只显示发出消息的人
注意:我发送这样的消息-->$rootScope.ws.$emit('teklif',data.content)代码>
如何使此套接字允许所有用户侦听所有操作
提前感谢。您正在使用Session.getOpenSessions()
。Javadoc声明:
返回所创建的所有打开的web套接字会话集的副本
表示与此会话连接到的同一端点的连接
表示一个连接。该集合包含此方法所属的会话
拜访。这些会议可能在会议结束后的任何时候都不会开放
返回此方法。例如,稍后在集合上迭代
时间可能会产生一个或多个封闭会话。开发人员应该使用
要检查的session.isOpen()
因此,它确实提供了连接到端点的所有客户端会话集
相反,您需要自己跟踪连接到端点的所有会话,并在该集合上迭代。这是一个。我发现我的问题是什么
@OnMessage
public String onMessage(Session session, String message) {
Gson gson = new Gson();
SocketMessage sm = gson.fromJson(message, new SocketMessage().getClass());
if (sm.getEvent().equals("teklif")) {
//SoncketTestMessage fromJson = gson.fromJson(test.getData(), SoncketTestMessage.class);
Set<Session> openSessions = session.getOpenSessions();
for (Session openSession : openSessions) {
try {
SocketResponse rsp = new SocketResponse();
rsp.setEvent("teklif");
rsp.setData(gson.toJson(sm.getData()));
//openSession.getBasicRemote().sendText("{\"event\":\"teklif\",\"data\":" + sm.getData() + "}");
openSession.getBasicRemote().sendText(gson.toJson(rsp, SocketResponse.class));
} catch (Exception ioe) {
System.out.println(ioe.getMessage());
}
}
}
return null;
}
我刚刚更改了sm.getData并发送正确的json格式,然后将其发送给所有用户
它之前只发送给所有者,因为函数返回消息,它的格式正确,只有所有者才能得到返回。现在所有用户都收到了此消息。wero感谢您的回复。我更改了端点,并将其作为示例,但没有任何更改我将所有会话添加到我的集合中,并检查是否打开,但当我尝试在ui端套接字中侦听时,只需再次更改操作所有者。
@OnMessage
public String onMessage(Session session, String message) {
Gson gson = new Gson();
SocketMessage sm = gson.fromJson(message, new SocketMessage().getClass());
if (sm.getEvent().equals("teklif")) {
//SoncketTestMessage fromJson = gson.fromJson(test.getData(), SoncketTestMessage.class);
Set<Session> openSessions = session.getOpenSessions();
for (Session openSession : openSessions) {
try {
SocketResponse rsp = new SocketResponse();
rsp.setEvent("teklif");
rsp.setData(gson.toJson(sm.getData()));
//openSession.getBasicRemote().sendText("{\"event\":\"teklif\",\"data\":" + sm.getData() + "}");
openSession.getBasicRemote().sendText(gson.toJson(rsp, SocketResponse.class));
} catch (Exception ioe) {
System.out.println(ioe.getMessage());
}
}
}
return null;
}
openSession.getBasicRemote().sendText("{\"event\":\"teklif\",\"data\":" + sm.getData() + "}");