websocket前端如何用js定时发送心跳包

abcd1996sc

请问使用workerman3.X的websocket协议,前端怎么用js定时发送心跳包呀,我用了

self.setInterval("heart()",1000);
function heart()
{
    ws.send('heart');
}

好像无法发送,不知怎么做呢?

14995 2 0
2个回答

edgexie

onopen回调里 初始化一个定时器,发心跳。
感觉你是不是写错了,setInterval里的heart()你确定要加双引号?
给你个setinterval的事例

    setInterval(show, 1000)

    function show(){
        console.log(1)
    }
  • abcd1996sc 2018-01-31

    谢谢你,我试了你的方法,这样
    ws.onopen = function() {
    alert("连接成功");
    ws.send('tom');
    alert("给服务端发送一个字符串:tom");

    self.setInterval(heart(),1000);
    };

    function heart()
    {
    ws.send('heart');
    }
    但客户端只发送了一个heart,后续没有在发送,我试了输出到控制台,只输出一个heart,请问你知道什么原因吗

  • edgexie 2018-01-31

    你能仔细看看我怎么写的setinterval吗?

  • abcd1996sc 2018-01-31

    @1239:我像你这么写
    var ws = new WebSocket("ws://127.0.0.1:2000");
    ws.onopen = function() {
    alert("连接成功");
    ws.send('5a6a1aa21dc07034e0c89260');
    alert("给服务端发送一个字符串:tom");
    // 使用刚指定的配置项和数据显示图表。
    setInterval(show, 1000)
    };

    function show(){
        console.log(1)
    }

    可以定时输出,但是 console.log(1)换为ws.send('heart')之后,就一次都不发送,服务器没收到

edgexie

hi,我用你的代码测试过了,我这是可以的。请查看你后端代码是否有问题。

  • abcd1996sc 2018-01-31

    谢谢你,我不加复杂逻辑测试可以了,猜测是之前后端代码有定时查询数据库,查询到记录更新就发送,里面有sleep()代码,造成接收不到
    我使用定时器修改了代码,已经可以了,万分感谢你

年代过于久远,无法发表回答
🔝