You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中net模块listening回调置于setImmediate()的含义解析

Node.js net模块listening回调的事件循环阶段解析

核心结论

是的,net.Server的listening回调确实运行在事件循环的check阶段,和setImmediate()回调的执行时机完全一致。

为什么JS源码里看不到setImmediate?

你查看的lib/net.js是Node.js的JS层逻辑,但listening事件的调度逻辑其实在C++底层实现:

  • 调用server.listen()后,底层libuv库会完成socket的监听绑定操作,绑定完成后,会通过uv_check_t句柄(对应事件循环的check阶段)通知JS层。
  • JS层收到通知后触发listening事件,这个调度过程和setImmediate()的底层实现逻辑一致,因此官方文档用“放入setImmediate()中”来简化描述它的执行时机,而非JS代码里真的调用了setImmediate。

验证方式

可以通过一段代码验证两者的执行时机一致性:

const net = require('net');
const server = net.createServer();

// 注册setImmediate回调
setImmediate(() => console.log('setImmediate 执行'));

// 注册listening回调
server.on('listening', () => {
  console.log('listening 回调执行');
  server.close();
});

server.listen(0); // 绑定随机空闲端口

运行这段代码会发现,两个回调会在事件循环的同一轮check阶段执行,执行顺序取决于它们被加入队列的先后。

内容的提问来源于stack exchange,提问作者DoHan_Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:45:36