Spring Boot

Spring BootでWebSocketを簡単に実装する方法

2020年8月8日

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のサーバ側の実装は完了です。

スポンサーリンク

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ポートを使用する場合の例

 

「wscat」はすごく便利なツールなのでお勧めです。

helpful