โŒจ๏ธSpring TIL - Web Socket

Jieunยท2023๋…„ 5์›” 15์ผ
0

๐Ÿ“
#230515

โœ”๏ธ Web Socket ์‚ฌ์šฉ์‹œ Servlet-context ์ž‘์„ฑ

  1. beans ๋“ฑ๋ก

  2. websoket:handlers ๋“ฑ๋ก


<!-- Websocket ์š”์ฒญ์‹œ ํ•ธ๋“ค๋Ÿฌ ํด๋ž˜์Šค์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ -->
	<beans:bean id="chatHandler" class="edu.kh.comm.chat.model.websocket.ChatWebsocketHandler" />
	<!--  id๋Š”์ž„์˜๋กœ ์ •ํ•˜๋Š” ๋ณ„์นญ. ํด๋ž˜์Šค๋Š” ํŒจํ‚ค์ง€์ด๋ฆ„ + ํด๋ž˜์Šค ์ด๋ฆ„ -->
	
	
	<websocket:handlers>
		
		<!-- ์›น์†Œ์ผ“ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  bean ์ง€์ • -->
		<websocket:mapping handler="chatHandler" path="/chat"/>
		<!-- mapping handler :  ์œ„์— beans id๊ฐ’ /-->
	
		<websocket:handshake-interceptors>
			<!-- interceptor : http ํ†ต์‹ ์—์„œ req, resp๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” ์—ญํ• 
			
			handshake-interceptors : 
					์š”์ฒญ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์ค‘ HttpSession(๋กœ๊ทธ์ธ์ •๋ณด, ์ฑ„ํŒ…๋ฐฉ๋ฒˆํ˜ธ)์„ ๊ฐ€๋กœ์ฑ„์„œ
					WebSocketSession์— ๋„ฃ์–ด์ฃผ๋Š” ์—ญํ•   
			-->
			
			<beans:bean class="org.springframework.web.socket.server.support.
                               	HttpSessionHandshakeInterceptor" />				
		</websocket:handshake-interceptors>
	
		<!-- SockJS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ์›น์†Œ์ผ“ ๊ฐ์ฒด์ž„์„ ์ธ์‹ -->
		<websocket:sockjs></websocket:sockjs>
		
		
	</websocket:handlers>

WebSocketHandler ์ธํ„ฐํŽ˜์ด์Šค : ์›น์†Œ์ผ“์„ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

โžก๏ธWebSocketHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ์›น์†Œ์ผ“ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

WebSocketHandler ์ฃผ์š” ๋ฉ”์†Œ๋“œ

  • void handlerMessage(WebSocketSession session, WebSocketMessage message)

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฉ”์„ธ์ง€๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์‹คํ–‰

  • void afterConnectionEstablished(WebSocketSession session)

    ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋˜๊ณ , ํ†ต์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด ์‹คํ–‰

  • void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus)

    ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜๋ฉด ์‹คํ–‰

  • void handleTransportError(WebSocketSession session, Throwable exception)

    ๋ฉ”์„ธ์ง€ ์ „์†ก์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰


TextWebSocketHandler

WebSocketHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ ํ…์ŠคํŠธ ๋ฉ”์„ธ์ง€ ์ „์šฉ ์›น์†Œ์ผ“ ํ•ธ๋“ค๋Ÿฌ ํด๋ž˜์Šค

handlerTextMessage (WebSocketSession session, TextMessage message)

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ํ…์ŠคํŠธ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•˜์„๋•Œ ์‹คํ–‰

public class ChatWebsocketHandler extends TextWebSocketHandler {
// ํด๋ผ์ด์–ธํŠธ์™€ ์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋˜๊ณ , ํ†ต์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ˆ˜ํ–‰


	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {	
		
		// WebSocketSession : ์›น์†Œ์ผ“์— ์ ‘์†/์š”์ฒญํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜
		System.out.println(session.getId() + "์—ฐ๊ฒฐ๋จ");		
	}

	@Override
	protected void handleTextMessage
    			(WebSocketSession session, TextMessage message)throws Exception {}

	@Override
	public void afterConnectionClosed
    		(WebSocketSession session, CloseStatus status) throws Exception {}

profile
๐Ÿ‘ฉโ€๐Ÿ’ผ๐Ÿ‘ฉโ€๐Ÿ’ผโžก๏ธโžก๏ธโžก๏ธ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป ์ƒ์‚ฐ์ž์˜ ์‚ถ์„ ์‚ด๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๊ณต๋ถ€์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€