반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AOP
- 어피티 독자
- 달개비
- 개발 공부
- 시나공
- 싱고니움
- 정보처리기사
- 아보카도
- 어피티 7월 북클럽
- 북클럼
- 스프링AOP
- springAOP
- 식물 키우기
- 정보처리기사 공부
- 식물
- Spring
- 정처기 실기
- 정처기
- 식물키우기
- 정보처리기사 실기
- 정처기 공부
- 정보처리기사 합격
- 자바
- 스프링
- 삼색달개비
- 아보카도키우기
- 오프라인 소모임
- 수경재배
- 아보카도 키우기
- js
Archives
- Today
- Total
deblog
[Spring] 웹소켓(webSocket) 구현 본문
반응형
웹소켓이란
Transport protocol의 일종으로 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조입니다.
채팅 핸들러 구현
의존성 추가
import org.springframework.stereotype.Component;
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;
- client와 url pattern 방식으로 접속, 메시지 전송,
메시지 받기, 접속 종료, 예외 처리를 해주는 모듈..
컨테이너에 chatHandler ==> / controller mapping: chatting.do.. - TextWebSocketHandler를 기본 클래스로 상속
- overriding 해야할 메서드 정의
(client의 처리 함수와 연동 처리)
- 접속시 처리할 내용
- 채팅시 처리할 내용
- 접속후 처리할 내용
- 예외가 발생시 처리할 내용 - 화면에서 해당 js기능메서드와 핸들러 클래스의 메서드와 연동되어 처리된다.
- overriding 해야할 메서드 정의
@Component("chatHandler")
public class ChattingHandler extends TextWebSocketHandler{
// 접속한 사용자들에 대한 정보를 저장하는 전역변수
private Map<String, WebSocketSession>
users = new ConcurrentHashMap<String, WebSocketSession>();
// 접속시
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
// TODO Auto-generated method stub
super.afterConnectionEstablished(session);
// 접속한
users.put(session.getId(), session);
}
- 메시지를 보낼때 : 접속한 사용자 중에서 메시지를 보낼 때.
- 접속한 사용자 중에서 메시지를 보낼 때(메시지 수신)
- 접속한 사용자들에게 메시지를 전송(메시지 발송) : 접속할 때,
접속한 사용자를 전역변수로 선언하여 할당처리..
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// TODO Auto-generated method stub
super.handleTextMessage(session, message);
System.out.println(session.getId()+"가 보낸 메시지:"+message.getPayload());
// 각 접속자에게 메시지를 전송(모두에게 전송)
// 특정한 사용자(임의로 발급된 아이디)에게 전송시 조건문 처리
for(WebSocketSession ws:users.values()) {
ws.sendMessage(message);
System.out.println(ws.getId()+"에게 메시지 전달!!");
}
}
접속을 끝낼때 처리할 메서드
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
// TODO Auto-generated method stub
super.afterConnectionClosed(session, status);
System.out.println(session.getId()+"접속을 종료합니다.");
users.remove(session.getId()); // 접속한 사용자에게 제외 처리.
}
예외가 발생했을때 처리
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
// TODO Auto-generated method stub
super.handleTransportError(session, exception);
System.out.println(session.getId()+"사용자 에러발생"+exception.getMessage());
}
시간 표시 로그 처리
private void log(String msg) {
System.out.println(new Date()+":"+msg);
}
'IT' 카테고리의 다른 글
[WEB API] web API란? (0) | 2022.02.08 |
---|---|
[OS] 태스크 스케줄링(Task Scheduling)이란? (0) | 2021.12.26 |
[Spring] 스프링 IoC(Inversion of Control)에 대해 (0) | 2021.11.18 |
Comments