网易首页 > 网易号 > 正文 申请入驻

我们一起对 Node.Js 一问一答

0
分享至

作者: theanarkh 来源:编程杂技

本文转载自微信公众号「编程杂技」,作者theanarkh。转载本文请联系编程杂技公众号。

一问一答是以问答的形式聊一下 Node.js 的一个个知识点。

1 setTimeout 和 setImmediate

setTimeout(() => {}, 0) 和 setImmediate 谁先执行,这个是 Node.js 里经常会被提到的一个问题,其实这两没什么关系,setImmediate 是 Node.js check 阶段的任务,setTimeout 是 timer 阶段的任务,在 Node.js 事件循环中,timer 阶段是在 check 阶段执行的,看起来 setTimeout 的回调肯定比 setImmediate 的回调先执行,但是 Node.js 的实现中规定了 setTimeout 的超时时间最小是 1,这就导致了事件循环开始时,定时器可能到期也可能不到期的情况,所以谁先执行是不一定的。下面是示例代码。

setTimeout(() => {
console.log('setTimeout')
}, 0);
setImmediate(() => {
console.log('setImmediate')
});

2 浏览器和 Node.js 的 setInterval 有什么区别

在前端的时候,我们经常会轮询接口或定时去做一些事情,但是我们一般不使用 setInterval,因为浏览器中, setInterval 是用单独的线程实现的,当任务超市时,定时线程就会往 JS 线程追加一个回调任务。哪怕 JS 线程阻塞了,也不影响定时线程往 JS 线程里追加任务。如果 JS 线程在运行一段耗时的代码,定时线程就会往 JS 线程里追加很多回调任务,导致耗时代码执行完后,大量回调被执行,比如短期内大量的轮询接口请求,这并不是我们预期的效果。所以这种场景下一般使用 setTimeout 里调用 setTimeout 去模拟 setInterval。但在 Node.js 里就不会存在这个问题,首先 Node.js 定时器不是单独线程实现的,然后当 setInterval 的回调被执行时,才会开始开始下一轮的计时。下面是 Node.js 中的实现,我们可以看到执行回调前会重新获取当前时间为下一轮开始时间,然后重新插入数据结构中。

3 如何在 Node.js 里监听一个随机端口

在某些场景下,我们可能需要监听一个随机的端口,在 Node.js 里我们可以这样做

const server = net.createServer()
.listen(() => {
console.log(server.address());
})

但是这种方式存在一个问题是在 cluster 模块下无法正常工作,比如我们希望在每一个进程里监听不同的随机端口,那么在子进程里执行 listen 的时候,不管是使用 cluster 的哪种模式都会导致多个进程监听同一个端口,解决方案就是使用 exclusive 标记。

const server = net.createServer()
.listen({ port: 0, exclusive: true }, () => {
console.log(server.address());
})

exclusive 指示 Node.js 不共享监听端口,而是每次都监听一个新的端口,至于为啥要穿 port 等于 0,因为 Node.js 里的逻辑就是这样的。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
豆包,你这么垃圾,怎么好意思收费?

豆包,你这么垃圾,怎么好意思收费?

崇晓视界
2026-05-04 17:24:53
中国机器人在美“出差”买票坐飞机:坐靠窗位,电池超标致航班延误,现场表演逗乐乘客

中国机器人在美“出差”买票坐飞机:坐靠窗位,电池超标致航班延误,现场表演逗乐乘客

红星新闻
2026-05-04 15:44:20
记者:弗洛伦蒂诺明天不会与穆里尼奥会面

记者:弗洛伦蒂诺明天不会与穆里尼奥会面

懂球帝
2026-05-04 21:36:18
缴物业费也要“政治正确”?别拿公职人员的“帽子”吓唬普通人

缴物业费也要“政治正确”?别拿公职人员的“帽子”吓唬普通人

迷世书童H9527
2026-05-04 19:24:17
周启豪太难了!不仅被王楚钦怒斥去找湿巾,还要给林诗栋指导战术

周启豪太难了!不仅被王楚钦怒斥去找湿巾,还要给林诗栋指导战术

凤幻洋
2026-05-04 17:16:48
十二年青春喂了空!CoCo终于坦白,揭露谢贤最真实的一面

十二年青春喂了空!CoCo终于坦白,揭露谢贤最真实的一面

一盅情怀
2026-05-04 16:37:51
男子骑“电鸡”上广州内环被罚1400元

男子骑“电鸡”上广州内环被罚1400元

新快报新闻
2026-05-04 14:08:09
圆明园被毁前老照片:老外拍下的珍贵历史,很震撼

圆明园被毁前老照片:老外拍下的珍贵历史,很震撼

年代回忆
2026-05-04 20:02:56
张敬轩风波后续!开唱一场就因病退出,英皇不再死保争议艺人?

张敬轩风波后续!开唱一场就因病退出,英皇不再死保争议艺人?

林大师热点
2026-05-04 13:22:44
华为Mate 90首发麒麟9050系列:8核心设计 华为最强芯片

华为Mate 90首发麒麟9050系列:8核心设计 华为最强芯片

快科技
2026-05-04 16:18:04
隐退13年,吴彦祖48岁超模妻子Lisa S宣布复出:我抚养了女儿,支持丈夫工作,是时候重返时尚界了

隐退13年,吴彦祖48岁超模妻子Lisa S宣布复出:我抚养了女儿,支持丈夫工作,是时候重返时尚界了

极目新闻
2026-05-04 08:53:35
舌吻3小时、喊儿子小狼狗,狄莺的畸形母爱终于反噬了

舌吻3小时、喊儿子小狼狗,狄莺的畸形母爱终于反噬了

子芫伴你成长
2026-05-02 22:50:39
26 岁范丞丞和71岁妈妈合影,范妈妈状态绝了,根本不像七十多

26 岁范丞丞和71岁妈妈合影,范妈妈状态绝了,根本不像七十多

橙星文娱
2026-05-04 17:19:52
骑士破猛龙:加雷特·阿伦的活力

骑士破猛龙:加雷特·阿伦的活力

张佳玮写字的地方
2026-05-04 10:56:38
日本博主晒相亲遭遇史诗级照骗!百万吃瓜网友围观:不能说一模一样,只能说“面目全非”!

日本博主晒相亲遭遇史诗级照骗!百万吃瓜网友围观:不能说一模一样,只能说“面目全非”!

东京新青年
2026-05-04 18:08:28
史上最大IPO,传来重磅消息!

史上最大IPO,传来重磅消息!

证券时报
2026-05-04 19:04:36
赵继伟取消认证辽宁球员!对管理层不满,今夏要离队?

赵继伟取消认证辽宁球员!对管理层不满,今夏要离队?

篮球大陆
2026-05-04 16:42:51
斯诺克世锦赛决赛第二阶段:吴宜泽10-7墨菲

斯诺克世锦赛决赛第二阶段:吴宜泽10-7墨菲

懂球帝
2026-05-04 04:59:44
2架美军C-17已到北京,中方仍不发请柬,特朗普这一把玩砸了!

2架美军C-17已到北京,中方仍不发请柬,特朗普这一把玩砸了!

Ck的蜜糖
2026-05-04 19:06:12
马克龙表态:法国不参与

马克龙表态:法国不参与

上观新闻
2026-05-04 15:11:07
2026-05-05 00:20:49
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 823关注度
往期回顾 全部

科技要闻

在中国市场搞「付费订阅」,豆包咋想的?

头条要闻

媒体:霍尔木兹海峡一声惊雷炸响 战争的引信已经点燃

头条要闻

媒体:霍尔木兹海峡一声惊雷炸响 战争的引信已经点燃

体育要闻

骑士破猛龙:加雷特·阿伦的活力

娱乐要闻

张敬轩还是站上了英皇25周年舞台

财经要闻

魔幻的韩国股市,父母给婴儿开户买股票

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

时尚
本地
房产
艺术
手机

女人不管年纪多大,衣柜里都要准备几件衬衫,百搭耐穿又简约

本地新闻

用青花瓷的方式,打开西溪湿地

房产要闻

五一楼市彻底明牌!塔尖人群都在重仓凯旋新世界

艺术要闻

火灾后第17年,TVCC电视文化中心正式启用

手机要闻

小米17 Max本月发布 小米手机史上最大电池

无障碍浏览 进入关怀版