Spring Stomp CAN发送未经请求的消息

时间:2016-01-21 17:43:27

标签: java spring spring-mvc websocket

在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文档说服务器无法发送未经过删除的消息呢?

1 个答案:

答案 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);
}

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