ws客户端 js版带心跳检测

var wsClient = {
    socket: null, //websocket的实例
    lockReconnect: false, //避免重复连接
    timeout: 1000, //60秒
    timeoutObj: null,
    serverTimeoutObj: null,
    getwebsocket: function (wsUrl,appKey,alias) { //新建websocket的函数 页面初始化 断开连接时重新调用
        var self = this;
        if (wsUrl == null || wsUrl == "" || wsUrl == undefined) {
            console.log('无效连接地址');
            return
        }
        this.socket = new WebSocket(wsUrl);
        this.socket.onerror = function (event) {
            console.log('websocket服务出错了');
            self.reconnect(wsUrl);
        };
        this.socket.onclose = function (event) {
            console.log('websocket服务关闭了');
            self.reconnect(wsUrl);
        };
        this.socket.onopen = function (event) {
            console.log('websocket 开启了  '+alias);
            self.socket.send('{"alias":"'+alias+'","appkey":"'+appKey+'"}')
        };
        this.socket.onmessage = function (event) {
            //如果获取到消息,心跳检测重置
            //拿到任何消息都说明当前连接是正常的
            //console.log('websocket服务获得数据了');
            //接受消息后的UI变化
            self.doWithMsg(event);
            self.reset().start();
        };
        return self.socket;
    },
    reconnect: function (url) {
        var self = this;
        if (self.lockReconnect) return;
        self.lockReconnect = true;
        //没连接上会一直重连,设置延迟避免请求过多
        setTimeout(function () {
            self.getwebsocket();
            self.lockReconnect = false;
        }, 2000);
    },
    //心跳检测
    reset: function () {
        clearTimeout(this.timeoutObj);
        clearTimeout(this.serverTimeoutObj);
        return this;
    },
    start: function () {
        var self = this;
        this.timeoutObj = setTimeout(function () {
            //这里发送一个心跳,后端收到后,返回一个心跳消息,
            //onmessage拿到返回的心跳就说明连接正常
            self.socket.send(1);
            console.log('websocket 心跳检测');
            self.serverTimeoutObj = setTimeout(function () { //如果超过一定时间还没重置,说明后端主动断开了
                self.socket.close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
                console.log('websocket 主动断开');
            }, self.timeout)
        }, this.timeout)
    }
}

使用方式:

//1、扩展消息体处理的业务方法
wsClient.doWithMsg=function(event){
		alert()
	}
//2、连接 ws服务器
var  wsSocket=wsClient.getwebsocket(wsUrl,"appkey","alias")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java WebSocket心跳检测代码示例,可以通过发送Ping消息并等待Pong响应来检测WebSocket连接是否仍然处于活动状态: ``` import java.net.URI; import javax.websocket.ClientEndpoint; import javax.websocket.CloseReason; import javax.websocket.ContainerProvider; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.WebSocketContainer; @ClientEndpoint public class WebSocketClient { private Session session; @OnOpen public void onOpen(Session session) { this.session = session; System.out.println("WebSocket opened: " + session.getId()); sendPing(); } @OnMessage public void onMessage(String message) { if ("pong".equals(message)) { System.out.println("Received Pong: " + message); sendPing(); } else { System.out.println("Received Message: " + message); } } @OnError public void onError(Throwable t) { System.err.println("WebSocket error: " + t.getMessage()); } @OnClose public void onClose(Session session, CloseReason closeReason) { System.out.println("WebSocket closed with reason: " + closeReason.getReasonPhrase()); } private void sendPing() { try { session.getBasicRemote().sendText("ping"); System.out.println("Sent Ping: " + session.getId()); Thread.sleep(5000); // Wait for Pong response } catch (Exception e) { System.err.println("Failed to send Ping: " + e.getMessage()); } } public static void main(String[] args) { try { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); URI uri = new URI("ws://localhost:8080/endpoint"); container.connectToServer(WebSocketClient.class, uri); } catch (Exception e) { System.err.println("Failed to connect to WebSocket server: " + e.getMessage()); } } } ``` 在上面的代码中,onOpen()方法在WebSocket连接打开时发送第一个Ping消息。onMessage()方法接收来自服务器的消息,并根据接收到的消息类型进行处理。如果收到Pong响应,则发送另一个Ping消息。如果收到其他类型的消息,则将其打印到控制台上。 sendPing()方法使用session.getBasicRemote().sendText()发送Ping消息,并等待5000毫秒以等待Pong响应。如果在等待期间未收到Pong响应,则会捕获InterruptedException异常,并将错误消息打印到控制台上。 最后,在main()方法中,我们使用WebSocketContainer.connectToServer()方法连接到WebSocket服务器并启动客户。请注意,URI参数应该是WebSocket服务器的点地址。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值