成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起對 Node.Js 一問一答

開發 前端
在前端的時候,我們經常會輪詢接口或定時去做一些事情,但是我們一般不使用 setInterval,因為瀏覽器中, setInterval 是用單獨的線程實現的,當任務超市時,定時線程就會往 JS 線程追加一個回調任務。

[[428450]]

本文轉載自微信公眾號「編程雜技」,作者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,這就導致了事件循環開始時,定時器可能到期也可能不到期的情況,所以誰先執行是不一定的。下面是示例代碼。

  1. setTimeout(() => { 
  2.     console.log('setTimeout'
  3. }, 0); 
  4.  
  5. setImmediate(() => { 
  6.     console.log('setImmediate'
  7. }); 

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 里我們可以這樣做

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

但是這種方式存在一個問題是在 cluster 模塊下無法正常工作,比如我們希望在每一個進程里監聽不同的隨機端口,那么在子進程里執行 listen 的時候,不管是使用 cluster 的哪種模式都會導致多個進程監聽同一個端口,解決方案就是使用 exclusive 標記。

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

 

exclusive 指示 Node.js 不共享監聽端口,而是每次都監聽一個新的端口,至于為啥要穿 port 等于 0,因為 Node.js 里的邏輯就是這樣的。

 

責任編輯:武曉燕 來源: 編程雜技
相關推薦

2014-10-13 10:41:48

安防布線

2023-06-20 06:44:14

Node.jsCPU 負載

2020-11-05 09:27:48

JavaScript開發技術

2023-09-29 08:58:38

2023-08-14 08:38:26

反射reflect結構體

2024-02-20 21:34:16

循環GolangGo

2021-07-28 07:53:20

Github ActiDotnet 應用

2022-01-17 06:59:40

Grep指令linux

2021-08-27 07:06:10

IOJava抽象

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2022-03-08 17:52:58

TCP格式IP

2022-03-31 18:59:43

數據庫InnoDBMySQL

2023-08-10 08:28:46

網絡編程通信

2021-08-27 07:06:09

DubboDocker技術

2021-01-12 05:08:49

DHCP協議模型

2022-10-18 07:33:57

Maven構建工具

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2023-09-10 21:42:31

2022-05-24 08:21:16

數據安全API
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品毛片在线观看 | 欧美亚洲视频 | 日韩欧美在线免费观看 | 在线看av网址 | 97人人澡人人爽91综合色 | 婷婷去俺也去 | 羞羞的视频免费在线观看 | 视频一区二区三区中文字幕 | 国产日韩一区二区三免费高清 | www.天堂av.com| 亚洲国产精品久久久久久 | 欧美综合一区二区三区 | 欧美 日韩 在线播放 | 国产成人99久久亚洲综合精品 | 91免费在线看 | 日韩一区二区三区四区五区六区 | 久久久www | 狠狠爱综合网 | a级毛片国产 | 亚洲精品第一 | 国产亚洲第一页 | av毛片在线免费观看 | 精品一区二区三区四区 | 欧美日韩在线综合 | 国产精品久久免费观看 | 久久这里有精品 | 99精品视频免费在线观看 | 亚洲精品一区二区三区在线观看 | 精品国产欧美一区二区三区不卡 | 九九热精品在线视频 | 中文字幕在线视频一区二区三区 | 视频一区二区中文字幕日韩 | 日本偷偷操 | 久久99精品久久久久久国产越南 | 人妖一区| av网站推荐 | 国产视频中文字幕 | 日本亚洲一区二区 | 天天久久 | 成人福利网| 午夜小电影 |