从electrumx_server.py启动:
Controller.py:
1、启动时实例化Controller实例,实例化需要传入lib/env.py中的Env对象,在Env对象中对初始化环境进行设置。
详情可对照官网文档理解环境变量的具体含义:
https://electrumx.readthedocs.io/en/latest/environment.html
2、server/controller.py是Electrumx的服务管理客户端,Controller包含守护进程,区块处理器,Mempool(守护进程的内存池),PeerManager(节点网络管理器)等,当区块处理器首先赶上守护进程时,服务器立即启动,Controller继承自server_base.py中的调ServerBase,controller中调用run()运行的方法来自ServerBase。
Controller作为ServerBase的子类,重写了父类中的方法,包括start_servers和shutdown,其中start_servers中默认启动了RCP服务。
默认情况下start_server中创建了wait_for_bp_catchup的任务,wait_for_bp_catchup(bp为block_proccessor缩写)等待区块处理器数据同步到和守护进程一致,才启动其他server(包括tcp和ssl)。
为了方便测试,一开始便启动了tcp的服务,在这里可以把这句注释掉,以避免重复启动相同服务。
结合上面的代码和下图理解Electrumx启动流程: