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

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小虎哥的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值