Java AngularJS ngWebscoket不向所有用户发送消息

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

我正在使用ngWebsocket监听用户操作,并根据当前操作更新所有用户页面,而不仅仅是发送操作的页面

我用java做了一个终点,它捕捉所有动作并发送消息给所有打开的会话。但当我进行测试时,端点查找会话并向所有会话发送消息,但消息只会发送给发送操作的人

我的java代码像

 @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() + "}");