gradle/ wrapper | 2 years ago | ||
src | 2 years ago | ||
.gitignore | 2 years ago | ||
README.md | 2 years ago | ||
build.gradle | 2 years ago | ||
gradlew | 2 years ago | ||
gradlew.bat | 2 years ago | ||
settings.gradle | 2 years ago |
WebSocketで通信を行うファイルを作り、そのファイルをConfigファイルに設定する必要がある。 SpringBootを使っていなければConfigファイル無しでも動いたが、SpringBootでRestなAPIと併用してWebSocketを使う場合、Configファイルでの設定が必要になると思う。
下の2行を追加する(二行目は追加されてる場合が多いかも)
dependencies { //(省略) implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.springframework.boot:spring-boot-starter-jersey' }
Configファイルの作成方法があまり出てこなかった。下の2つの記事を参考に書いたら出来た。 作ったWebSocketコードのファイルは、このConfigファイルで@Beanしないと動かない。
@Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { //registry.addHandler(unitWebSocketHandler, "/unit").setAllowedOrigins("*"); } @Bean public WebSocketDemo webSocketDemo() { return new WebSocketDemo(); } @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
下の例は、現在の時刻を5秒に1回送信するサンプル。 下の記事を参考にした。
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); service.scheduleWithFixedDelay(WebSocketDemo::broadcast, 5, 5, TimeUnit.SECONDS);} @OnMessage public String onMessage(String message) {
System.out.println("WebSocketで受信したメッセージ/ " + message); return "WebSocketでメッセージを正常に受信しました!";} @OnError public void onError(Throwable th) {
System.out.println("WebSocketエラーが発生/ " + th.getMessage());} @OnOpen public void onOpen(Session session) {
System.out.println("WebSocketセッション確立"); sessions.add(session);} @OnClose public void onClose(Session session) {
System.out.println("WebSocketセッション終了"); sessions.remove(session);} public static void broadcast() {
Date now = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); sessions.forEach(session -> { session.getAsyncRemote().sendText("Broadcast : " + formatter.format(now)); });}
}
もしパラメータを付けたい場合、URIパス には @ServerEndpoint("/chat/{user}")のようにパスパラメータを定義できる。 これで、@PathParamを通して以下のようにパラメータを取得可能。
@OnOpen public void onOpen(Session session, @PathParam("user") String user) { } ```
WebSocketとJSONを組み合わせる場合、下の記事が参考になった。