我試圖在我的應用程序中實現一些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)但沒有幫助。
我不知道這裏發生了什麼,爲什麼不是代碼工作。
我將不勝感激任何幫助。提前致謝。