私はSpring WebSocketsを使用することを学んでいますが、動作するための非常に基本的な例は得られません。 私は参考としてhttp://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.htmlを使用しました。非常に基本的なSpring websocketの返品404
WebSocketConfig:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
private Logger logger = Logger.getLogger(WebSocketConfig.class);
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
logger.debug("Registering websocket handler");
registry.addHandler(gameWebSocketHandler(), "/StreamGame/ws/play");
}
@Bean
public WebSocketHandler gameWebSocketHandler() {
return new GameWebSocketHandler();
}
}
WebSocketHandler:
public class GameWebSocketHandler extends TextWebSocketHandler {
final static Logger logger = Logger.getLogger(GameWebSocketHandler.class);
public GameWebSocketHandler() {
logger.debug("Constructor handler");
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
super.handleTransportError(session, exception);
logger.error("Transport error: " + exception.getMessage());
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
logger.info("Handle message received: " + message.getPayload());
//session.sendMessage(new TextMessage("Here is your answer"));
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
super.afterConnectionEstablished(session);
logger.info("Connection established!");
}
}
私もこれで、間違えていなければ、私のように、クライアントからサーバへのWebSocketを介してメッセージを送信することができるはずです以下:
sock = new WebSocket('ws://localhost:8080/StreamGame/ws/play');
接続時に次のエラーが表示されます。
のWebSocketハンドシェーク中のエラー:予期しない応答コード:404WrappedWebSocket @ VM84:35(匿名関数)(指数)@:11J @のjqueryの-3.1.1.min.js:jqueryの-3.1.1.min @ 2K .js:2 (インデックス):26エラー未定義
のWeb.xmlには、以下が含まれています
<!-- Processes application requests -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Mapping websocket to spring dispatcher servlet -->
<servlet-mapping>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
マイSpringアプリケーションコンテキストが含まれています
をWebSocketを接続する場合
私は、サーバーログに以下を参照してください。
> 2016-11-13 TRACE - 39804 - org.springframework.web.servlet.DispatcherServlet -
> http-nio-8080-exec-2 - Bound request context to thread:
> [email protected]
> 2016-11-13 DEBUG - 39804 - org.springframework.web.servlet.DispatcherServlet -
> http-nio-8080-exec-2 - DispatcherServlet with name
> 'SpringMVCDispatcherServlet' processing GET request for
> [/StreamGame/ws/play]
> 2016-11-13 TRACE - 39804 - org.springframework.web.servlet.DispatcherServlet -
> http-nio-8080-exec-2 - Testing handler map
> [org.sp[email protected]4e92ebf3]
> in DispatcherServlet with name 'SpringMVCDispatcherServlet'
> 2016-11-13 TRACE - 39804 - org.springframework.web.socket.server.support.WebSocketHandlerMapping
> - http-nio-8080-exec-2 - No handler mapping found for [/play]
> 2016-11-13 WARN - 39804 - org.springframework.web.servlet.PageNotFound - http-nio-8080-exec-2 -
> No mapping found for HTTP request with URI [/StreamGame/ws/play] in
> DispatcherServlet with name 'SpringMVCDispatcherServlet'
こんにちは、 はあなたのアドバイスをいただき、ありがとうございます。私は/ StreamGame/playにwebsocketの設定を変更しようとしましたが、同じ結果が返されます: registry.addHandler(gameWebSocketHandler()、 "/ StreamGame/play"); – Wesley
さて、あなたのクラスがインスタンス化されていなければ、それは動作しません。アプリケーションをセットアップするためにSpring-Bootを使用しましたか?そうでなければ、コンポーネントスキャンクラスパスを正しく設定するのを忘れているかもしれません。 – Quagaar
こんにちはQuagaar、 オリジナルの投稿にapplication-context.xmlとweb.xmlを追加しました。 web.xmlで何かを定義する必要はありますか? – Wesley