java Sping Boot Websockets:有没有办法让其他用户重新加载页面

toiithl6  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(90)

当客户端通过WebSocket发送某些内容时,我希望其他客户端刷新页面,而不是发送方。

window.addEventListener("load", (e) => {
  const socket = new SockJS("/stomp-endpoint");
  const stompClient = Stomp.over(socket);
  stompClient.connect({}, (frame) => {
    stompClient.subscribe("/topic/greetings", (greeting) => {
      console.log("UPDATE" + greeting.body);
      window.location = "/"; //location.reload();
    });
    Array.from(document.getElementsByClassName("move")).forEach((element) =>
      element.addEventListener("click", (e) => {
        console.log("move");
        stompClient.send("/app/hello", {}, JSON.stringify({ name: "Tammie" }));
      })
    );
  });
});

这是我的javascript代码,但是这样每个订阅WebSocket的客户端都会重新加载他的页面,这是一个问题,因为其他方法不会在发送者网站上解决。
我试着给予一个用户一个id,它有点工作,只有重新加载客户端,有一个不同的id,但我不太清楚如何设置不同的id在我的控制器没有改变每次页面刷新。

wnavrhmk

wnavrhmk1#

我个人建议使用发送客户端的id或发送者的一些特定信息向服务器发送事件。服务器应该有一个Map,用于每个客户端/用户的WebSocket连接。我会遍历这个Map,并向每个客户端发送一个特定的事件,除了发送的客户端(id必须不匹配)。每当客户端接收到这个特定的事件时,它就会重新加载页面。
但是,首先,想一想。你真的需要重新加载整个页面吗?听起来你想重新加载页面,因为事情已经改变了。你可以告诉客户端什么已经改变了,这样event_listener只更新dom的一部分。
另外,我建议你阅读有关服务器发送事件的信息。它们比websockets便宜得多。

相关问题