【问题标题】:Spring Stomp CAN send unsolicited messagesSpring Stomp 可以发送未经请求的消息
【发布时间】:2016-01-21 17:43:26
【问题描述】:

在 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 文档说服务器不能发送未经请求的消息?

【问题讨论】:

    标签: java spring spring-mvc websocket


    【解决方案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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 2019-06-27
      • 2014-02-21
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多