您的位置:首页 > 其它

WebSocket 的使用,和客户端断电,服务器检测断开连接

2017-04-17 11:17 471 查看

WebSocket 的使用,和客户端断电,服务器检测断开连接

服务器用WebSocketServlet,实例化自定义的MessageInbound 。

web.xml中配置socket

<servlet>
<servlet-name>WebSocket</servlet-name>
<servlet-class>com.shadow.smmp.control.WebSocket </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WebSocket</servlet-name>
<url-pattern>/websocket/websocket</url-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,可以网上查一下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息