WebSocket 사용, 클라이언트 전원 끄기, 서버 분리 감지

4999 단어 websocket

WebSocket 사용, 클라이언트 전원 끄기, 서버 분리 감지


서버는 WebSocketServlet을 사용하여 사용자 정의 MessageInbound를 실례화합니다.


web.xml에서 socket 설정

   <servlet>
        <servlet-name>WebSocketservlet-name>
        <servlet-class>com.shadow.smmp.control.WebSocket servlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>WebSocketservlet-name>
        <url-pattern>/websocket/websocketurl-pattern>
    servlet-mapping>

Websocket 구현
public class WebSocket extends WebSocketServlet {
    @Override
    protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest request) {
        return new UserMessageInbound ();
    }

}

MessageInbound를 다시 작성하여 클라이언트로부터 메시지를 수신합니다.

public class UserMessageInbound extends MessageInbound {
    /**
     *  
     */
    @Override
    protected void onOpen(WsOutbound outbound) {

    }

    @Override
    protected void onClose(int status) {
           System.out.println(" "+status);


    }

    @Override
    protected void onBinaryMessage(ByteBuffer message) throws IOException {
        throw new UnsupportedOperationException("Binary message not supported.");

    }

    /**
     *  
     */
    @Override
    protected void onTextMessage(CharBuffer message) throws IOException {

    }
}

클라이언트는 쓰지 않습니다. 주로 js일 수도 있고 안드로이드 쪽일 수도 있습니다.


만약 클라이언트가 이상하게 단전되어 연결이 계속 어떻게 되고 있다면 서버가 클라이언트가 아직 있는지 검사한 후에 연결을 끊어야 한다. 사실은 매우 간단하다. 서버가 심장 박동 검사를 쓰고 호출해야 한다.

    ByteBuffer b = ByteBuffer.wrap("close".getBytes());
                System.out.println(" " + this.user);
               wsOutbound.close(1, b);


wsOutbound.close(1, b);이 방법은 클라이언트가 온라인이 아니라면 클라이언트가 없으면 자발적으로 연결을 해제할 수 있다고 판단한다


사실 WebSocket Servlet은 Tomcat의 Websocket을 사용합니다. 좀 유행이 지났습니다. Spring에는 자신만의 Websocket이 있습니다. 인터넷에서 찾아볼 수 있습니다.

좋은 웹페이지 즐겨찾기