2015-09-02 203 views
0

我試圖在我的應用程序中實現一些websocket的東西。我正在使用Spring Boot和Groovy來實現這一點。但是我有一些發送的websocket消息的問題,但沒有被Spring控制器正確處理。我試圖搜索相同的問題,但沒有找到任何有用的信息。春季啓動 - websocket控制器問題

目前,以簡化我用相同的類如下:https://github.com/spring-guides/gs-messaging-stomp-websocket

當我運行我的應用程序,在控制檯我看到這一點:

INFO 3778 --- [主] sasSimpAnnotationMethodMessageHandler:映射 「{[/你好/ **],爲messageType = [MESSAGE]}」 到公共org.myapp.Greeting org.myapp.GreetingController.greeting(org.myapp.HelloMessage)拋出java.lang.Exception的

所以看起來不錯。但事實上,事實並非如此。我的控制器代碼:

@Controller 
class GreetingController { 

@MessageMapping("/hello/**") 
@SendTo("/topic/greetings") 
Greeting greeting(HelloMessage message) throws Exception { 
    return new Greeting("Hello, " + message.getName() + "!") 
} 

} 

和我的WebSocket的配置是:

@Configuration 
@EnableWebSocketMessageBroker 
class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

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

    @Override 
    void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/hello").withSockJS() 
    } 

} 

我可以連接到上面的WebSocket但發送的任何消息並沒有給任何影響。我正在使用以下javascript代碼:

var stompClient = null; 
var socket = new SockJS('/hello'); 

stompClient = Stomp.over(socket); 
stompClient.connect({}, function (frame) { 
    console.log('Connected: ' + frame); 
    stompClient.subscribe('/topic/greetings', function (greeting) { 
    console.log('received message'); 
    console.log(greeting); 
    }); 
    stompClient.send("app/hello", {}, JSON.stringify({'name': 'my name'})); 
}); 

它發送消息但沒有回覆。我在控制器方法中添加了打印消息,並且它不打印任何內容,因此發送的問候消息不會傳遞給控制器​​方法,甚至不會被調用。我甚至嘗試設置映射來處理所有消息@MessageMapping('/**'),但它不起作用。

這是彈簧日誌(調試級別)調用JavaScript代碼以上後:

2015年9月2日21:47:49.593 DEBUG 3778 --- [NIO-8080-EXEC-5] osweb .servlet.DispatcherServlet:DispatcherServlet處理[/ hello/info]的GET請求 2015-09-02 21:47:49.593 DEBUG 3778 --- [nio-8080-exec-5] swsmmaRequestMappingHandlerMapping:Looking啓動處理程序的方法路徑/ hello /信息 2015-09-02 21:47:49.593 DEBUG 3778 --- [nio-8080-exec-5] swsmmaRequestMappingHandlerMapping:找不到[/ hello/info]的處理程序方法 2015-09-02 21:47:49.593 DEBUG 3778 --- [nio-8080-exec-5] oswshandler.SimpleUrlHandlerMapping:請求[/ hello/info]的匹配模式是[/ hello/] 2015-09-02 21:47:49.593 DEBUG 3778 --- [nio-8080-exec-5] oswshandler。 SimpleUrlHandlerMapping:請求[/ hello/info]的URI模板變量爲{} 2015-09-02 21:47:49.593 DEBUG 3778 --- [nio-8080-exec-5] oswshandler.SimpleUrlHandlerMapping:Mapping [/ hello/info]與HandlerExecutionChain與處理程序[org.spr[email protected]31e2232f]和1攔截器 2015-09-02 21:47:49.593 DEBUG 3778 --- [nio-8080-exec- 5] osweb.servlet.DispatcherServlet:[/ hello/info]的Last-Modified值爲:-1 2015-09-02 21:47:49.594 DEBUG 3778 --- [nio-8080-exec-5] oswssth DefaultSockJsService:GET http://localhost:8080/hello/info?t=1441223269561 2015-09-02 21:47:49.594 DEBUG 3778 --- [nio-8080-exec-5] osweb.servlet.DispatcherServlet:空ModelAndView以名稱'dispatcherServlet'返回給DispatcherServlet:假設HandlerAdapter完成請求處理 2015-09-02 21:47:49.594 DEBUG 3778 --- [nio-8080-exec-5] osweb.servlet.DispatcherServlet:成功完成請求 2015-09-02 21:47:49。600 DEBUG 3778 --- [nio-8080-exec-8] osweb.servlet.DispatcherServlet:DispatcherServlet處理GET請求[/ hello/721/4hmzc45f/websocket] 2015-09-02 21: 47:49.601 DEBUG 3778 --- [nio-8080-exec-8] swsmmaRequestMappingHandlerMapping:查找path/hello/721/4hmzc45f/websocket的處理程序方法2015-09-02 21:47:49.601 DEBUG 3778 --- [nio-8080-exec-8] swsmmaRequestMappingHandlerMapping:找不到[/ hello/721/4hmzc45f/websocket]的處理程序方法2015-09-02 21:47:49.601 DEBUG 3778 --- [nio-8080-exec -8] oswshandler.SimpleUrlHandlerMapping:請求[/ hello/721/4hmzc45f/websocket]的匹配模式是[/ hello/] 2015-09-02 21:47:49.601 DEBUG 3778 --- [nio-8080- exec-8] oswshandler.SimpleUrlHandlerMapping:請求的URI模板變量[/ hello/721/4hmzc45f/webs ocket] {} 2015-09-02 21:47:49.601 DEBUG 3778 --- [nio-8080-exec-8] oswshandler.SimpleUrlHandlerMapping:映射[/ hello/721/4hmzc45f/websocket]到HandlerExecutionChain和handler [org.spr[email protected]31e2232f]和1攔截器 2015-09-02 21:47:49.601 DEBUG 3778 --- [nio-8080-exec-8] osweb.servlet。 DispatcherServlet:[/ hello/721/4hmzc45f/websocket]的Last-Modified值爲:-1 2015-09-02 21:47:49.603 DEBUG 3778 --- [nio-8080-exec-8] osweb.servlet .DispatcherServlet:空ModelAndView以名稱'dispatcherServlet'返回給DispatcherServlet:假設HandlerAdapter完成請求處理 2015-09-02 21:47:49.603 DEBUG 3778 --- [nio-8080-exec-8] osweb.servlet.DispatcherServlet :成功完成請求 2015-09-02 21:47:49.604 DEBUG 3778 --- [nio -8080-EXEC-8] swshLoggingWebSocketHandlerDecorator:新WebSocketServerSockJsSession [ID = 4hmzc45f]

我試圖使用相同的依賴(我使用的搖籃,如果這一點很重要)和類爲GS-消息 - 跺腳 - 的WebSocket (https://github.com/spring-guides/gs-messaging-stomp-websocket)但沒有幫助。

我不知道這裏發生了什麼,爲什麼不是代碼工作。

我將不勝感激任何幫助。提前致謝。

回答

0

多小時後,我終於找到了解決辦法...在javascript代碼我張貼的

我會發送消息到

「應用程序/你好」

代替「/ app/hello」

所以它不應該是stompClient.send("app/hello", {}, JSON.stringify({'name': 'my name'}));stompClient.send("/app/hello", {}, JSON.stringify({'name': 'my name'}));

這麼簡單而愚蠢的事情,但很難找到...也許有人會有同樣的問題,並找到這個解決方案,所以我不刪除我的問題。