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



我正在使用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;
}`

当我调试Set<Session> openSessions = session.getOpenSessions();时,它向我显示两个会话并向所有远程发送消息。我在控制器中聆听

 $rootScope.ws.$on('teklif', function (data) { console.log(data);
});

它仅显示发出消息的人

注意:我发送这样的消息 --> $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;
}

我犯了一个错误

openSession.getBasicRemote().sendText("{"event":"teklif","data":" + sm.getData() + "}");

我刚刚更改了sm.getData并发送正确的json格式,然后将其发送给所有用户。

由于该函数返回消息,它之前只发送给所有者,并且格式正确,只有所有者才能获得返回。现在所有用户都收到消息。

相关内容

  • 没有找到相关文章

最新更新