弹簧踩踏可以发送未经请求的消息



在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);
}

但它无法向客户端发送未经请求的消息,除非该订阅存在。如果这是他们的意图,那么措辞有点糟糕。

相关内容

  • 没有找到相关文章

最新更新