在Spring WebSocket文档中,我发现了这样一句话:
重要的是要知道服务器无法发送未经请求的消息。
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html(25.4.1)
但是我尝试了以下代码:
@Controller
public class WebsocketTest {
@Autowired
public SimpMessageSendingOperations messagingTemplate;
@PostConstruct
public void init(){
ScheduledExecutorService statusTimerExecutor=Executors.newSingleThreadScheduledExecutor();
statusTimerExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
messagingTemplate.convertAndSend("/topic/greetings", new Object());
}
}, 5000,5000, TimeUnit.MILLISECONDS);
}
}
并且消息按预期每 5000 毫秒广播一次。
那么为什么 Spring 文档说服务器不能发送未解决的消息呢?
下一句话可能意味着在 stomp.js 客户端中,您需要设置订阅:
来自服务器的所有消息都必须响应特定客户端 订阅
但这并不一定意味着响应请求。例如,Web 套接字可以将信息发送到以下各项:
Javascript:
stompClient.subscribe('/return/analyze', function(data) {
generateTableData(JSON.parse(data.body));
});
春天:
@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
public void sendSetpoint(String data) throws Exception {
this.simpMessagingTemplate.convertAndSend("/return/analyze", data);
}
但它无法向客户端发送未经请求的消息,除非该订阅存在。如果这是他们的意图,那么措辞有点糟糕。