nodejs 心跳回复接口

需求:
心跳函数,没有指令等60s后回复ok,当存在指令时,就立即回复该指令.
方案:
用清除定时器方法希望可以结束掉await的异步方法
操作:
我现在用一个定时器模拟一个指令,希望达到立即往下执行的效果
问题:
指令到达,清除定时器,await的异步方法因为没有resolve就没有往下执行,
所以个人觉得好像不应该用定时器,请问有其他的方法吗(已解决)
setInterval(可行):
1578540197(1).jpg
最终代码(采用setTimeout和node的emitter事件监听 注意事件器的创建和删除 防止内存泄漏):
1578561708(1).jpg

阅读 4k
3 个回答

所以这其实是个心跳脚本嘛,没请求就发心跳,有请求就发请求,那你不应该用 asynchronous function,直接写个全局心跳对象就好了:

// heartbeat.js
let interval;
export default {
  start() {
    interval = setInterval(() => {
      sendHeartBeat();
    }, 6000);
  },
  stop() {
    cleartInterval(interval);
  },
}

// request.js
import hb from './heartbeat.js';
function doRequest() {
  
}
export default {
  async post(url, data) {
    hb.stop();
    const result = await doRequest(url, data)
    hb.start();
    return result;
  },
}

// index.js
import http from './requrest.js';
post(url, {
  name: 'meathill',
});

还是有两个问题:

  1. 为啥要等待 6s
  2. 指令通过什么途径触发

先提供一个思路吧:

把等待周期改成 50ms,用 setInterval,累计12次(约6s)之后结束;或者指令来了结束。


好好问问题,别人才好回答

  1. 你的需求是什么?
  2. 你的方案是什么?
  3. 你做了什么?(写了)
  4. 你的问题是什么?(没写清楚)

不太理解你怎么处理这个返回结果,但大致就是需要一个监听器。如果有持续调用,则监听器复位重新监听,大于6秒没有指令监听器会执行某些操作

let global = { timer: undefined };

const resetTimer = (callback) => {
    if (global.timer !== undefined) {
        clearTimeout(global.timer);
    }
    
    global.timer = setTimeout(() => {
        clearTimeout(global.timer);
        global.timer = undefined;
        callback('stopped');
    }, 6000);
}

function request(ctx) {
        resetTimer((result) => {
            ctx.body = result;
            return;
        });
        
        /// 执行你的操作
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题