在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文档说服务器无法发送未经过删除的消息呢?
答案 0 :(得分:1)
下一句话可能意味着在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);
}
但它不能向客户端发送未经请求的消息,除非该订阅存在。如果这是他们的预期观点,那么措辞有点差。