簡體   English   中英

spring websocket 無法建立連接

[英]spring websocket cannot establish connection

無法通過瀏覽器客戶端與我的 websocket 服務器建立連接。

配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic/", "/queue/");
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/greeting");
}


}

和 controller:

@MessageMapping("/message")
@SendToUser("/queue/reply")
public String processMessageFromClient(@Payload String message, Principal principal) throws Exception {
    String name = new Gson().fromJson(message, Map.class).get("name").toString();
    System.out.println(name);
    //messagingTemplate.convertAndSendToUser(principal.getName(), "/queue/reply", name);
    return name;
}

我啟動服務器,然后在瀏覽器中打開 index.html 然后連接到ws://localhost:8080/greeting然后發送消息到/app/message

但實際上什么也沒發生。 瀏覽器檢查器顯示 404。我怎么了?

這是在 Spring 中實現 WebSocket 的方法。首先,您應該配置 Web 套接字消息代理並注冊 stomp 端點,如下所示。 在這里,我使用 setAllowedOrigins("*").withSockJS() 將此端點訪問到任何主機。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/greeting")
                .setAllowedOrigins("*")
                .withSockJS();
    }
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/app")
                .enableSimpleBroker("/topic", "/queue/");
    }
}

然后我創建 controller,如下所示。

@Controller
public class WebSocketController {

    private final SimpMessagingTemplate template;

    @Autowired
    WebSocketController(SimpMessagingTemplate template){
        this.template = template;
    }

    @MessageMapping("/queue/reply")
    public void sendMessage(String message){
        System.out.println(message);
        this.template.convertAndSend("/topic",  message);
    }
}
  

使用@MessageMapping("/queue/reply") 而不是上面的@SendToUser("/queue/reply")。

從那個簡單的消息傳遞模板,我使用 convertAndSend() 方法與那個消息代理進行異步數據通信。 如果有任何數據到達該消息代理,它將使用上面配置的名為 /socket 的端點與 SockJS 和 Stomp 自動發送該數據。

您可以參考本文了解更多關於 Spring web 插座的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM