Javascript 如何等待订阅建立?
我有以下js代码:Javascript 如何等待订阅建立?,javascript,spring-mvc,websocket,stomp,sockjs,Javascript,Spring Mvc,Websocket,Stomp,Sockjs,我有以下js代码: stompClient.subscribe('/topic/clients', function (calResult) { updateClientsTable(JSON.parse(calResult.body)); }); $.get("/clients", null); 下面的服务器代码(最后一行调用它): 有时前端会忽略$.get(“/clients”,null)的结果 正如我所理解的问题:在结果进入前端的那个一刻,订阅并没有发生 如果要放置$.get(“
stompClient.subscribe('/topic/clients', function (calResult) {
updateClientsTable(JSON.parse(calResult.body));
});
$.get("/clients", null);
下面的服务器代码(最后一行调用它):
有时前端会忽略$.get(“/clients”,null)的结果代码>
正如我所理解的问题:在结果进入前端的那个一刻,订阅并没有发生
如果要放置$.get(“/clients”,null)代码>下面的代码-所有工作正常
您能解释一下如何等待订阅建立吗?我认为不将REST请求与此消息传递模式混合使用更有意义
您是否考虑过通过SockJS将“updateClients”命令发送到“/apps/updateClients”频道,该频道会回复“/topic/clients”频道 正如@light_303已经提到的,混合HTTP请求和通知机制是不好的。当客户端连接时,您可以注册时刻(在/clients
上获取请求),但当客户端断开连接时,您不能注册时刻
你应该用下一种方式来思考。当用户订阅/topic/clients
时:
您单独向他发送带有所有客户端列表的响应,然后仅推送更新
您单独向他发送当前服务器时间或某种ID,然后只推送更新。用户在对/clients
的GET请求中使用给定的时间/ID,并在该时刻接收完整的客户端列表。当您有增量更新(即向列表中添加新元素)时,此选项在这种情况下可能会很好,否则就不太好了
检查此问题:
这真是可笑,春天怎么会使事情复杂化。我建议您查看其他实时web通信框架,如Vert.x或Netty和on-Go编程语言。使用WebSockets或SockJS而不是STOMP。所有这些技术都可以明显地为您提供更灵活、更高性能的解决方案。另外,请检查project,它可能与您的任务相关。您可以使用spring messaging
中的@SubscribeMapping
注释
如果您按照描述和配置了spring消息传递
,则服务器端代码可能如下所示:
@Controller
public class MessagingController {
@SubscribeMapping("/clients")
public List<Client> loadClients() {
return clientService.getClientList();
}
}
我假设您已经通过.connect()建立了一个有效的stomp连接,但是在您查询主机一次之前,后续订阅无法获取消息?STOMP不为“成功”订阅提供回调。它不会持续复制。我不明白这句话:直到你询问主人一次
@Controller
public class MessagingController {
@SubscribeMapping("/clients")
public List<Client> loadClients() {
return clientService.getClientList();
}
}
stompClient.subscribe('/topic/clients', function (calResult) {
updateClientsTable(JSON.parse(calResult.body));
});