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