Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Stomp可以发送未经请求的消息_Java_Spring_Spring Mvc_Websocket - Fatal编程技术网

Java Spring Stomp可以发送未经请求的消息

Java Spring Stomp可以发送未经请求的消息,java,spring,spring-mvc,websocket,Java,Spring,Spring Mvc,Websocket,在Spring WebSocket文档中,我发现了这样一句话: 重要的是要知道服务器不能发送未经请求的消息 (25.4.1) 但是,我尝试了以下代码: @Controller public class WebsocketTest { @Autowired public SimpMessageSendingOperations messagingTemplate; @PostConstruct public void init(){ Sched

在Spring WebSocket文档中,我发现了这样一句话:

重要的是要知道服务器不能发送未经请求的消息

(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 docs说服务器不能发送未经授权的消息呢?

下一句话可能意味着在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);
}
弹簧:

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);
}
但除非存在订阅,否则它无法向客户端发送未经请求的消息。如果这是他们的意图,那就有点措词不当