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,也可以是Android端的

如果客户端异常断电,导致连接一直在怎么办,就需要服务器检测客户端是否还在,然后断开连接,其实很简单,服务器写个心跳检测,然后调用

    ByteBuffer b = ByteBuffer.wrap("close".getBytes());
                System.out.println("服务器发送离线命令给" + this.user);
               wsOutbound.close(1, b);

wsOutbound.close(1, b);这个方法判断如果客户端不在线,检测到客户端不在就会主动释放连接

其实WebSocketServlet用的是Tomcat的Websocket,有点过时了,Spring有它自己的Websocket,可以网上查一下

你可能感兴趣的:(websocket)