[ Java / Socket ] 웹 소켓 서버 생성 / 접속 / 접속종료

2024. 6. 29. 12:56· LANGUAGE/└ Java

환경 : Spring Tool Suite4

 

 

 

서버 생성 및 설정

   - BasicWebSocketServer.java

/**
 * 웹소켓 접속 및 메시지 전송을 중계하는 서버
 * - 상속을 받아서 자격을 획득 (WebSocketHandler / TextWebSocketHandler / BinaryWebSocketHandler)
 * - @Service 로 등록하여 사용
 * - 필요한 메소드를 재정의하여 사용
 * 		- afterConnectionEstablished : 사용자가 접속했을 때 실행되는 메소드
 * 		- afterConnectionsClosed : 사용자가 접속을 종료했을 때 실행되는 메소드
 * 		- handleTestMesage : 사용자가 메세지를 전송했을 때 시행되는 메소드
 * */

@Slf4j
@Service
public class BasicWebSocketServer extends TextWebSocketHandler {
    @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
            log.debug("사용자가 접속했어요");
        }//재정의
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        log.debug("사용자가 접속 종료했어요");
    }
}

 

   - WebSocketServerConfiguration.java

/**
 * 웹소켓과 관련된 설정을 작성하는 파일
 * 이미 등록해둔 웹소켓 서버들을 가져와서 추가적인 설정을 한 뒤 활성화
 * */

@EnableWebSocket//웹소켓을 사용할 것임을 표시(활성화)
@Configuration//설정파일임을 표시
public class WebSocketServerConfiguration implements WebSocketConfigurer {

	@Autowired
	private BasicWebSocketServer basicWebSocketServer;
	
	@Override
	public void registerWebSocketHandlers (WebSocketHandlerRegistry registry) {
		//매개 변수로 주어진 registry에 웹소켓 서버를 등록
		//- 반드시 웹페이지처럼 주소가 부여되어야 함
		//- (중요)절대로 다른 주소와 겹치면 안된다.
		registry.addHandler(basicWebSocketServer, "/ws/basic");
	}
}

 


페이지 설정

   - PageController.java

@Controller
@RequestMapping("/page")
public class PageController {
	
	@RequestMapping("/basic")
	public String basic() {
		return "basic";
	}
	
}

 

 

    - basic.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    <h1>Basic 웹소켓 예제</h1>
    
    <button class = "btn-connect">연결</button>
    <button class = "btn-disconnect">종료</button>
    
    <!-- jquery CDN -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>
    <script type="text/javascript">
        $(function(){
            //연결 버튼을 누르면 웹소켓 생성, 종료 버튼을 누르면 웹소켓 소멸
            $(".btn-connect").click(function(){
                //var socket = new WebSocket("연결주소"); //WebSocket은 기본 제공하는 기능
                //최상위 객체인 window를 사용하여 어디서든 접근 가능하게 설정 //자바스크립트는 객체 확장이 가능
                window.socket = new WebSocket("ws://localhost:8080/ws/basic"); //앞의 프로토콜이 ws로 다르기 때문에 주소를 다 적어주어야 한다
            });
            
            $(".btn-disconnect").click(function(){
                window.socket.close();
            });
            
        });
    </script>
    
</body>
</html>

출력 결과

 

  - 연결 화면

 

   - 종료 화면

 

 

 

   - 로그 확인

728x90