我使用spring / stomp / websocket框架以异步方式通知用户消息。我成功完成了这个。但是,我会从客户端获得ACK,以便在完成此操作时可以执行某些服务器端操作。
流程大致如流:
服务"知道"该消息已被确认并将状态更新为" ACK"在DB。
stompClient.connect({login:'guest', passcode:'guest'},
function(frame) {
setConnected(true);
**var headers = {ack: 'client'};**
...
stompClient.subscribe('/user/guest/response',function(notification) {
//doSomething
}), **headers**);
}
在服务中,发送消息:
this.messagingTemplate.convertAndSendToUser(user, "/response",msg, map);
有没有办法在服务器端处理客户端ACK? 或者,我试图做一个
stompClient.send("/app/response/ack/"+messageId);
在客户端上,在处理订阅的方法中,但是徒劳无功。
有人可以告诉我处理确认的标准方法是什么?我一直在努力解决这个问题几天,任何想法都会非常有用。
谢谢!
答案 0 :(得分:3)
根据spec使用ACK
框架。服务器发送ack:some_id
标头,客户端使用some_id
框架中的ACK
。
答案 1 :(得分:2)
简单经纪人的答案是否。
https://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
简单的经纪人非常适合入门,但只支持a STOMP命令的子集(例如没有回答,收据等)依赖于a 简单的消息发送循环,不适合集群。作为一个 替代方案,应用程序可以升级到使用功能齐全的消息 代理。