-
WebSocket을 이용한 채팅Spring 2021. 7. 2. 23:16
기본설정
1. pom.xml 에 dependency 추가
2. EchoHandler class 생성
package com.sp.ex; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; 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; @RequestMapping("/echo") public class EchoHandler extends TextWebSocketHandler { // 세션 리스트 private List<WebSocketSession> sessionList = new ArrayList<WebSocketSession>(); private static Logger logger = LoggerFactory.getLogger(EchoHandler.class); // 클라이언트가 연결 되었을 때 실행 @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessionList.add(session); logger.info("{} 연결됨", session.getId()); } // 클라이언트가 웹소켓 서버로 메시지를 전송했을 때 실행 @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println("하이"); System.out.println(message.getPayload()); logger.info("{}로 부터 {} 받음", session.getId(), message.getPayload()); // 모든 유저에게 메세지 출력 for (WebSocketSession sess : sessionList) { sess.sendMessage(new TextMessage(message.getPayload())); } } // 클라이언트 연결을 끊었을 때 실행 @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessionList.remove(session); logger.info("{} 연결 끊김.", session.getId()); } }
3. Chat.jsp 추가
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.1.5/sockjs.min.js"></script> </head> <body> <input type="text" id="message" /> <input type="button" id="sendBtn" value="submit"/> <div id="messageArea"></div> </body> <script type="text/javascript"> $("#sendBtn").click(function() { sendMessage(); $('#message').val('') }); let sock = new SockJS("http://localhost:8787/ex/echo/"); sock.onmessage = onMessage; sock.onclose = onClose; // 메시지 전송 function sendMessage() { sock.send($("#message").val()); } // 서버로부터 메시지를 받았을 때 function onMessage(msg) { var data = msg.data; $("#messageArea").append(data + "<br/>"); } // 서버와 연결을 끊었을 때 function onClose(evt) { $("#messageArea").append("연결 끊김"); } </script> </html>
'Spring' 카테고리의 다른 글
WebSocket이란 무엇일까? (채팅기능) (0) 2021.07.05 Mapper에서 특정 문자를 포함한 쿼리 검색 (0) 2021.07.01 SMTP 프로토콜을 이용한 Spring 에서 메일 보내기 (gmail) (0) 2021.06.30 컨트롤러와 프론트(jsp) 값 전달하는 방법 (0) 2021.06.29 reCAPTCHA v2 (0) 2021.06.26