目次
Spring BootでWebSocket(STOMPなし)の実装
スポンサーリンク
pom.xml
pom.xmlに「spring-boot-starter-websocket」を追加します。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
WebSocketを有効にするクラスの作成
WebSocketConfigurerを継承したクラスを作り、WebSocketを有効にします。「registry.addHandler(messageHandler(), "/test");」で設定した値でアクセスすることができます。
package com.example.demo.webSocket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; /** * WebSocketの管理 */ @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { /** * WebSocketの登録 */ @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(messageHandler(), "/test"); } /** * WebSocketHandler(コントロールするクラス)を定義 * @return WebSocketHandler */ @Bean public WebSocketHandler messageHandler() { return new MessageHandler(); } }
WebSocketをハンドリングするクラスの作成
TextWebSocketHandlerを継承したクラスを作り、接続確立時、メッセージ受信時、接続終了時の操作を記述していきます。
package com.example.demo.webSocket; import java.io.IOException; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; /** * WebSocketのHandler */ public class MessageHandler extends TextWebSocketHandler { /** * 接続確立 */ @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("WebSocketの接続が確立しました。"); } /** * メッセージの送受信 */ @Override public void handleTextMessage(WebSocketSession session, TextMessage message) { System.out.println("メッセージ受信:" + message.getPayload()); try { TextMessage outputMessage = new TextMessage("メッセージ返信:送信内容=" + message.getPayload()); session.sendMessage(outputMessage); } catch (IOException e) { e.printStackTrace(); } } /** * 接続終了 */ @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { System.out.println("WebSocketの接続が終了しました。"); } }
スポンサーリンク
WebSocketの動作確認
今回は「wscat」というツールで確認してみます。
サーバ(バックエンド)とクライアント(フロントエンド)の両方を実装する場合は、そのまま動作確認できますが、どちらか片方を実装する場合や、両方実装するが担当者が別の場合、わざわざ試験用にサーバ もしくは クライアントを作るのは効率よくありません。
そこで「wscat」を使えば、簡単に試験することができます。
wscatのインストール方法
Node.js が入っていれば npm コマンドでインストールすることができます。
npm install -g wscat
※WindowsにNode.jsをインストールする手順は以下の通りです。
インストール手順
wscatでWebSocketの動作確認
Spring Bootで作成したWebSocketのプロジェクトを起動し、WebSocketサーバを立ち上げます。
そして、今回は「wscat」をWebSocketクライアントとして使用、次のコマンドでWebSocketサーバに接続することができます。
[HTTP接続]
wscat -c ws://localhost:8080/test
[HTTPS接続]
wscat -c wss://localhost:8080/test
ちなみに「wscat」をサーバとして立ち上げる場合は、次のコマンドを使用します。これでWebSocketクライアントから「localhost:3000」で接続することができます。
wscat -l 3000
※3000ポートを使用する場合の例