多程序間的模型
master:
在這個模型下,master 程序承擔了程序管理的工作(類似 pm2),不執行任何業務**,我們只需要執行起乙個 master 程序它就會幫我們搞定所有的 worker、agent 程序的初始化以及重啟等工作了。
master 程序的穩定性是極高的,線上執行時我們只需要通過 egg-scripts 後台執行通過egg.startcluster
啟動的 master 程序就可以了,不再需要使用 pm2 等程序守護模組。
agent:
在大部分情況下,我們在寫業務**的時候完全不用考慮 agent 程序的存在,但是當我們遇到一些場景,只想讓**執行在乙個程序上的時候,agent 程序就到了發揮作用的時候了。
由於 agent 只有乙個,而且會負責許多維持連線的髒活累活,因此它不能輕易掛掉和重啟,所以 agent 程序在監聽到未捕獲異常時不會退出,但是會列印出錯誤日誌,我們需要對日誌中的未捕獲異常提高警惕。
worker:
worker 程序負責處理真正的使用者請求和定時任務的處理。而 egg 的定時任務也提供了只讓乙個 worker 程序執行的能力,所以能夠通過定時任務解決的問題就不要放到 agent 上執行。
worker 執行的是業務**,相對會比 agent 和 master 程序上執行的**複雜度更高,穩定性也低一點,當 worker 程序異常退出時,master 程序會重啟乙個 worker 程序。
'use strict'
;const cluster =
require
('cluster');
if(cluster.ismaster)
from worker#$`
);})
;}else
if(cluster.isworker));
}
在 agent 上呼叫該方法會傳送給 agent 自己
agent.messenger.sendrandom(action, data)
:
module.
exports);
(,);
});}
egg-ready:
上面的示例中提到,需要等egg-ready
訊息之後才能傳送訊息。只有在 master 確認所有的 agent 程序和 worker 程序都已經成功啟動(並 ready)之後,才會通過 messenger 傳送egg-ready
訊息給所有的 agent 和 worker,告知一切準備就緒,ipc 通道可以開始使用了。
接受:在message上監聽對應的action事件,就可以接受其他程序傳送來的資訊了。
on(action, data =>);
once
(action, data =>);
Egg 中獲取遠端的資料
egg 提供了 this.ctx.curl 方法獲取遠端的資料,讓我們可以輕鬆的實現乙個簡單的爬蟲功能,以下是乙個使用的具體示例。首先在config資料夾下的 config.default.js 中定義要獲取資料的網域名稱。use strict const config exports use fo...
Egg 中的控制器繼承與相容
專案中多個控制器使用公共的方法時,可以將這些方法寫在乙個基類控制器中,其它的控制器全部繼承於這個基類控制器,這樣基類中的方法就可以在其它的控制器中使用了。定義基類控制器。use strict const controller require egg controller 所有控制器的基類 class...
Python中的多程序
編寫完的 沒有執行時稱為程式,正在執行的 稱為程序。程式是死的 靜態的 程序是活的 動態的 作業系統輪流讓各個任務交替執行,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。多程序中,每個程序中所有資料 包括全域性變數 都各自擁有乙份,互不影響。例如 我們啟動了qq,qq就是乙...