WebSocket

WebSocket 은 기존의 비연결지향중심의 HTTP 통신의 단점을 극복하고 서버-클라이언트가 전이중 통신 채널을 구축하기 위해 고안된 통신 프로토콜이다. WebSocket 은 2014년 HTML5 의 출시와 동시에 표준이 되었으며, 이를 통해 별도의 추가 채널(플랫폼) 없이 웹만으로도 소켓 통신이 가능하게 되었다.


서버 구현 (Java)

Java 에서는 javax.websocket 라이브러리를 구현하는 것으로 WebSocket 의 Server Side 구축이 가능하다. 어노테이션 기반 개발로 직관적인 코드를 확인할 수 있다.

import javax.websocket.*;

@ServerEndpoint("/websocket")
public class websocket {

    /**
    * WebSocket 연결 시
    */
    @OnOpen
    public void handleOpen(){
        System.out.println("client is now connected...");
    }

    /**
    * Client 로부터 메시지 수신 시
    */
    @OnMessage
    public String handleMessage(String message){
        System.out.println("receive from client : " + message);
        String replymessage = "echo " + message;
        System.out.println("send to client : " + replymessage);

        return replymessage;
    }

    /**
    * WebSocket 연결종료 시
    */
    @OnClose
    public void handleClose(){
        System.out.println("client is now disconnected...");
    }

    /**
    * 에러 발생 시
    */
    @OnError
    public void handleError(Throwable t){
        t.printStackTrace();
    }
}

클라이언트 구현 (Javascript)

웹 브라우저의 클라이언트 개발은 Javascript 의 WebSocket 객체를 구현하는 것으로 가능하다. 각기 필요한 상황에 맞는 콜백 함수를 구현하고 메시지 송신, 연결 종료 등 클라이언트 주도 기능 역시 구현한다.

var webSocket = new WebSocket("ws://localhost:8080/websocket"); // ws://{Address}/{EndPoint}

// 연결 시
webSocket.onopen = function(message){
    console.log("websocket is connected...");
}

// 연결 종료 시
webSocket.onclose = function(message){
    console.log("websocket is disconnected...");
}

// 에러 발생 시
webSocket.onerror = function(message){
    console.log("error occured...");
}

// 메시지 수신 시
webSocket.onmessage = function(message){
    console.log(`Receive From Server => ${message.data}`);
}

// 메시지 송신
var sendMessage = function(message){
    webSocket.send(message);
}

// 연결 종료
var disconnect = function(){
    webSocket.close();
}