问题描述:
前端设置什么,后端设置什么。
解决办法:
下面的办法实用于websocket。
如果使用的是tcp协议,dtu设备,则只需要打开三个心跳设置参数即可。
心跳数据值不能为空,当需要服务端定时给客户端发送心跳数据时, $gateway->pingData
设置为服务端要发送的心跳请求数据,心跳数据是任意的,只要客户端能识别即可。客户端收到心跳数据可以忽略不做任何处理。
1,打开start_gateway.php 文件
$gateway->pingNotResponseLimit = 1;
// 心跳间隔
$gateway->pingInterval =5;
// 心跳数据
$gateway->pingData = 'ping';
2,前端设置:
socket.onopen = function() {
$("#msg").html("连接成功...<br>");
setInterval(
function(){
//socket.send('heart beat');
socket.send(JSON.stringify({"type":"ping","aid":aid}));
}, 5000
);
};
//如果前端没有给服务器发送心跳, console.log(message) 会出现start_getway.php文件$gateway->pingData设置的值。出现次数是$gateway->pingNotResponseLimit设置的值,如果超出这个值就关闭与前端的连接。
//如果前端给服务器发送了心跳,event.php就不做任何处理, console.log(message) 就不会显示$gateway->pingData设置的值。
socket.onmessage = function(e) {
var message=eval("("+e.data+")");
console.log(message);
}
注意:gateway Notice: Trying to access array offset on value of type null。如果给服务器发送
heart beat就会报错,因为服务器接收json格式。