WebSocket

Build

參考資料:(https://ithelp.ithome.com.tw/articles/10197142)

implementation 'org.springframework.boot:spring-boot-starter-websocket'

4. 必須要有一個 WebSocketConfig 類

注意,如果依賴裡面有 spring-boot-starter-web 那會找不到 AbstractWebSocketMessageBrokerConfigurer


import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{
	  @Override
	    public void configureMessageBroker(MessageBrokerRegistry config) {
	        config.enableSimpleBroker("/topic");

	    }

	    @Override
	    public void registerStompEndpoints(StompEndpointRegistry registry) {
	        registry.addEndpoint("/endpointChatRoom").withSockJS();
	    }
}

@EnableWebSocketMessageBroker 這個註解是宣告啟用STOMP協定,他是WebSocket的子協定來傳輸(message broker)消息,當註冊了之後控制器(Controller)就能使用 configureMessageBroker 這個方法是用來配置訊息代理(MessageBroker) registerStompEndpoints 這個方法讓我們註冊了一個節點,用來映射指定 URL,方法內註冊一個 STOMP 的 endpoint,並指定使用 SockJS 協定。

5. 我們還要建立一個 Controller 來當我們的入口

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

import com.tutorial.Model.ChatClientModel;
import com.tutorial.Model.ServerResponseModel;

@Controller
public class CharRoomController {
	@MessageMapping("/messageControl")
	@SendTo("topic/getResponse")
	public ServerResponseModel said(ChatClientModel responseMessage) throws InterruptedException{
		Thread.sleep(3000);
		return new ServerResponseModel("歡迎來到," + responseMessage.getClientname());
	}
}

@MessageMapping類似於 @RequestMapping

重點與心得

1.此篇先介紹server端如何建構,下一篇建構client端並且做demo測試 2.我們需要建構兩個數據模型,一個是接收client訊息一個是發送給client訊息 3.這是一個廣播是的發送範例,如果你要的是一個獨立的私密聊天室你可以參考Spring Security將它整合在一起就可以達到你要的目的 4.下一篇會介紹Client如何完成我們的聊天室 5.這邊在強調一次這個範例不能加上spring-boot-starter-web 6.Spring Boot執行時會掃描group內的@Configuration如果有@Enable...將會啟用該配置

參考資源

Last updated