91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nodejs中如何做定時任務

發布時間:2021-10-25 10:05:18 來源:億速云 閱讀:174 作者:iii 欄目:web開發

本篇內容主要講解“Nodejs中如何做定時任務”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Nodejs中如何做定時任務”吧!

Nodejs中如何做定時任務

目前我們遇到了這樣一個需求,每個用戶都可以自定義定時推送,定時任務的時間配置由用戶自己配置,隨時修改,而不是傳統的由服務器設定好時間跑定時任務。

如果是已知定時任務循環周期,那么Linux Crontab 定時任務即可實現。在node中也已經有相對成熟的方案。下面將我自己了解到的Node定時任務方案方案做一個介紹。

egg框架提供的schduler定時任務

egg是阿里旗下的Node企業級應用框架,它提供了一套機制給開發者優雅的編寫定時任務,詳細參考官方文檔:https://eggjs.org/zh-cn/basics/schedule.html ,這里不對具體用法做詳細闡述,只簡單講一下它的配置用法。

1.靜態定時任務,即定時周期,處理邏輯寫死。

2.動態配置定時任務,這種相對來說靈活一點,開發者可以通過配置文件控制定時任務周期。

3.通過代碼手動觸發定時任務,我們可以根據一些邏輯判斷是否觸發定時任務。

從上述三點看,egg提供的定時任務不能滿足我們需要用戶自行配置定時周期的需求,所以只能尋求其他方案,通過查詢資料我們發現了node-schedule的庫也提供了定時任務的功能。

node-schedule

在瀏覽了node-schudule的文檔 https://www.npmjs.com/package/node-schedule 之后,他的用法如下:

const schedule = require('node-schedule');

const job = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

是的,他支持自定義定時周期,可以滿足我們的需求,可以作為我們的選擇,Nice!

繼續瀏覽其他開發者的使用文章,發現有一個node-schedule的相關問題記錄,簡要說就是定時器在預定時間執行了2次,具體問題見原文:https://cnodejs.org/topic/5b58414b8d66b90b2b7384a7 。這是一個低概率的問題,我們沒有去做驗證,因為我們的需求,及時定時器執行兩次,對我們的結果并沒有影響,所以這不是阻礙我們使用它的障礙,有興趣的同學可以去測測bug。

寫在最后

最后這里是對我們自己項目定時定時任務解決方案的總結,不感興趣的同學可略過。

我們的后端就是用的egg框架,所以最后我們的解決方案是在agent進程中加了node-schdule的定時器,用戶的定時器都會同步的agent進程中執行,目前我們的用戶量不大,暫時只想到了這種解決方式,后續起量后可能會分布式部署后臺。

這會是一個問題,量大的話單進程跑也會是一個問題,并且egg本身不建議在agent進程中做太多業務相關的東西。還有個比較重要的是agent是輔助進程,一些work的公共工作實在agent中完成的,agent發生未捕獲的錯誤不會退出重啟,所以容錯處理必須要做,而且要做好。

到此,相信大家對“Nodejs中如何做定時任務”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元氏县| 衡阳市| 凤城市| 梅州市| 甘洛县| 南丰县| 敦化市| 玉环县| 方正县| 遵义市| 阜平县| 弥勒县| 晋中市| 旺苍县| 临西县| 资兴市| 新龙县| 霸州市| 珲春市| 神农架林区| 贵港市| 崇信县| 陕西省| 天祝| 绿春县| 介休市| 台东县| 鄂尔多斯市| 朝阳县| 阳曲县| 霍城县| 洪洞县| 施秉县| 桓台县| 松桃| 珠海市| 东港市| 望城县| 大兴区| 富源县| 临夏市|