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,可以网上查一下