WebSocket

심재철·2022년 4월 21일
0

SpringBoot

목록 보기
1/1

WebSocket

웹소켓은 일반 소켓에 HTTP프로토콜(STOMP) 얹은 것!

특징

  1. 최초 접속이 일반 http request를 통해 handshaking과정을 통해 이루어진다는 점이다. ( 기존의 CORS나 인증 과정을 이어갈 수 있다. )
  2. 양방향 통신이 가능하다.

STOMP

STOMP (Simple Text Oriented Messaging Protocol)은 메세징 전송을 효율적으로 하기 위해 탄생한 프로토콜

특징

STOMP는 Publish-Subscribe 매커니즘을 제공한다

Practice Project

Spring Boot ( Spring Web + Web Socket )

ChatHandler.java

@Component
public class ChatHandler implements WebSocketHandler {
    private static List<WebSocketSession> list= new ArrayList<>();
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        System.out.println("closed");
        list.remove(session);
    }
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        list.add(session);
        System.out.println("connet");
    }
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        String payload=message.getPayload().toString();
        System.out.println("chat:"+payload);
        //여기서 이걸 db에 저장하면 되겠다.
        for(WebSocketSession sess:list)
        sess.sendMessage(message);   
    }
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {   
    }
    @Override
    public boolean supportsPartialMessages() {
        // TODO Auto-generated method stub
        return false;
    }
}

webSocketCofiConfig.java

@Configuration
@EnableWebSocket
public class webSocketConfig implements WebSocketConfigurer {
    @Autowired
    WebSocketHandler webSocketHandler;
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler, "/websocket")
        .setAllowedOrigins("*");
    } 
}

결과

Websocket Connect 요청 및 메세지 전송!

Server측에서 Message를 받음!

Error: getaddrinfo ENOTFOUND http

원인 =>http prefix로 인해 post에서 host를 정확히 인식하지 못해 생기는 Error
해결 =>http prefix를 없앤 상태로 localhost:8080/websocket로 host주소를 바꿔 요청했다.
profile
행복 > 돈과 명예

0개의 댓글