我想安排作業每 x 秒運行一次,所以怎么做。一個例子是每 10 秒 ping 一個服務器,但所有這些都應該是異步的,所以其他功能都不會停止。
uj5u.com熱心網友回復:
這取決于您所說的“其他功能都沒有停止”是什么意思。Ping 服務器已經是非阻塞和異步的,因為 nodejs 中的所有網路都是這樣。
所以,像這樣的代碼:
setInterval(() => {
// put code to do the ping here
}, 5000);
不會阻塞服務器的其余部分,因為對 ping 執行的代碼已經是非阻塞的。
但是,您服務器的其余部分可能會阻止setInterval()按時啟動。如果您正在服務器中執行一些長時間運行的阻塞代碼,那么在setInterval()該代碼完成之前不會發生計時器回呼,并且它可能會從計劃運行的確切時間延遲。由于 nodejs 是單執行緒和事件驅動的,它無法處理下一個計時器事件,直到前一個事件(無論是什么)執行完其代碼的阻塞部分。
如果你想絕對確保你的計時器總是在非常接近它應該運行的時候運行,你要么必須確保你的程式的其余部分永遠不會阻塞很長時間,或者你需要將計時器移到另一個 Javascript 執行緒中或處理并通過訊息傳遞回主執行緒。
您可以在現有的 nodejs 行程中使用 WorkerThread,也可以使用 child_process 模塊運行一個單獨的子程式來為您執行 ping 操作。Nodejs 具有內置訊息,可以從 WorkerThread 或 child_process 回傳到主程式或從主程式回傳。
uj5u.com熱心網友回復:
您需要利用多執行緒來制作非阻塞代碼。我建議使用名為 worker_threads 的內置 node.js 多執行緒包。 https://nodejs.org/api/worker_threads.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/378983.html
上一篇:貓鼬陣列物件中的遞增數字
