ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹소켓
    카테고리 없음 2018. 8. 20. 02:32

    용어 

    WebSocket

    HTTP 에서 양방향 통신을 제공하는 프로토콜 (실시간으로 통신이 가능)


    STOMP 

    Simple (or Streaming) Text Oriented Message Protocol


    폴링 방식 

    주기적으로 계속해서 확인


    메세지 브로커

    ex. RabbitMQ, ActiveMQ etc...


    토픽

    URI 와 유사한 개념

    자신이 받고자 하는 주제를 정의하면 그것에 해당하는 메시지를 수신 했을 때 처리하는 것



    서버


    설정

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    
        // 메세지 브로커 설정 
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            // 해당 URI를 구독하고 있는 클라이언트에게 메세지 전달
    config
    .enableSimpleBroker("/topic"); // 컨트롤러 URI의 prefix config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // 서버 URI registry.addEndpoint("/gs-guide-websocket").withSockJS(); } }

    컨트롤러

    @Controller
    public class GreetingController {
    
    
        @MessageMapping("/hello") // Request Mapping 개념
        @SendTo("/topic/greetings") // 해당 URI를 구독하는 모든 사용자에게 메세지 전송
        public Greeting greeting(HelloMessage message) throws Exception {
            Thread.sleep(1000); // simulated delay
            return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
        }
    
    }



    클라이언트

    HTML에서 자바스크립트 라이브러리 import

    <script src="/webjars/sockjs-client/sockjs.min.js"></script>

    <script src="/webjars/stomp-websocket/stomp.min.js"></script>


    자바스크립트 파일

    function connect() {
        var socket = new SockJS('/gs-guide-websocket');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function (frame) {
            setConnected(true);
            console.log('Connected: ' + frame);
            /topic/greetings에 대한 구독 신청
            stompClient.subscribe('/topic/greetings', function (greeting) {
                showGreeting(JSON.parse(greeting.body).content);
            });
        });
    }
    
    ...
    
    function sendName() {
        stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));
    }
    
    function showGreeting(message) {
        $("#greetings").append("<tr><td>" + message + "</td></tr>");
    }




    참고 

    http://heowc.tistory.com/10

    https://spring.io/guides/gs/messaging-stomp-websocket/

    http://asfirstalways.tistory.com/359

    https://supawer0728.github.io/2018/03/30/spring-websocket/

    https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/web.html#websocket-stomp-message-flow




    댓글

Designed by Tistory.