php 长连接心跳_Socket心跳机制-JS+PHP实现

本文介绍了WebSocket协议的客户端程序实现,包括连接到服务器、发送和接收消息、断开连接的功能。同时,详细阐述了心跳机制,通过定时发送心跳保持连接活跃,并在心跳超时时进行重连操作。
摘要由CSDN通过智能技术生成

WebSocket协议的客户端程序

连接到WS服务器

向WS服务器发消息并接收消息

断开与WS服务器的连接

var wsClient=null;var lastHealthTime = 0; //记录最近一次心跳更新时间

var heartbeatTimer = null;//心跳执行timer

var checkTime = 10000; //心跳检查时间间隔-毫秒 10秒

var healthTimeOut = 20000;//心跳时间间隔-毫秒 20秒

var reconnectTimer = null;//重连接timer

var reconnectTime = 10000;//重连接时间10秒后

var uid = "20";var connectStatus = 3; //状态

function connect(){if (connectStatus == 3){

wsClient=new WebSocket('ws://127.0.0.1:8000'); //这个端口号和容器监听的端口号一致

console.log("连接中...");

console.log("readyState:"+wsClient.readyState);if(reconnectTimer){

clearTimeout(reconnectTimer);

}//连接成功

wsClient.onopen =function(){

connectStatus=wsClient.readyState;//表名自己是uid1

var data = uid; //1标识连接wsClient.send(data);

console.log('ws客户端已经成功连接到服务器上');

msg.innerHTML="连接成功...";

console.log("readyState:"+wsClient.readyState);var time = newDate();

lastHealthTime=time.getTime();if(heartbeatTimer){

clearInterval(heartbeatTimer);

}

heartbeatTimer=setInterval(function(){keepalive(wsClient)}, checkTime);

};//收到消息

wsClient.onmessage =function(e){

console.log('ws客户端收到一个服务器消息:'+e.data);

console.log("readyState:"+wsClient.readyState);

val.innerHTML=e.data;var data =e.data;if(data){var msg_type = data.substr(0,1);var uid = data.substr(1);var time = newDate();

lastHealthTime=time.getTime();//更新客户端的最后一次心跳时间

}

}//错误

wsClient.onerror =function(e){

connectStatus=wsClient.readyState;

console.log("error");

console.log("readyState:"+wsClient.readyState);

msg.innerHTML="连接错误...";

};//关闭

wsClient.onclose =function(){

connectStatus=wsClient.readyState;

console.log('到服务器的连接已经断开');

msg.innerHTML="连接断开...";

console.log("readyState:"+wsClient.readyState);//n秒后重连接

reconnectTimer =setTimeout(function(){

connect();

},reconnectTime);

}

}

}

btConnect.οnclick=function(){

connect();

}

btSendAndReceive.οnclick=function(){

wsClient.send('Hello Server');

}

btClose.οnclick=function(){

console.log("断开连接");

console.log(wsClient.readyState);

wsClient.close();

}

function keepalive(ws){var time = newDate();

console.log(time.getTime()-lastHealthTime);if ((time.getTime()-lastHealthTime)>healthTimeOut){

msg.innerHTML="心跳超时,请连接断开...";if(heartbeatTimer){

clearInterval(heartbeatTimer);//n秒后重连接

ws.close();

reconnectTimer=setTimeout(function(){

connect();

},reconnectTime);

}

}else{

msg.innerHTML="我依然在连接状态";ws.send(data);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值