從electrumx_server.py啟動:
Controller.py:
1、啟動時實(shí)例化Controller實(shí)例,實(shí)例化需要傳入lib/env.py中的Env對象,在Env對象中對初始化環(huán)境進(jìn)行設(shè)置。
詳情可對照官網(wǎng)文檔理解環(huán)境變量的具體含義:
https://electrumx.readthedocs.io/en/latest/environment.html
2、server/controller.py是Electrumx的服務(wù)管理客戶端,Controller包含守護(hù)進(jìn)程,區(qū)塊處理器,Mempool(守護(hù)進(jìn)程的內(nèi)存池),PeerManager(節(jié)點(diǎn)網(wǎng)絡(luò)管理器)等,當(dāng)區(qū)塊處理器首先趕上守護(hù)進(jìn)程時,服務(wù)器立即啟動,Controller繼承自server_base.py中的調(diào)ServerBase,controller中調(diào)用run()運(yùn)行的方法來自ServerBase。
Controller作為ServerBase的子類,重寫了父類中的方法,包括start_servers和shutdown,其中start_servers中默認(rèn)啟動了RCP服務(wù)。
默認(rèn)情況下start_server中創(chuàng)建了wait_for_bp_catchup的任務(wù),wait_for_bp_catchup(bp為block_proccessor縮寫)等待區(qū)塊處理器數(shù)據(jù)同步到和守護(hù)進(jìn)程一致,才啟動其他server(包括tcp和ssl)。
為了方便測試,一開始便啟動了tcp的服務(wù),在這里可以把這句注釋掉,以避免重復(fù)啟動相同服務(wù)。
結(jié)合上面的代碼和下圖理解Electrumx啟動流程: