EOS代码分析5接收网络信息

  

网络部分:
主要()
{
应用程序().set_version (eosio:: nodeos::配置::版本),
应用程序().register_plugin ();//通过register_plugin()函数将插件注册到应用程序的插件插件集合中,插件是一个地图容器
根=fc:汽车:app_path ();//设定数据和配置路径
应用程序()。set_default_data_dir(根/癳osio/nodeos/data");
应用程序()。set_default_config_dir(根/癳osio/nodeos/config");

  

//应用程序初始化部分:1、输入参数处理,2,插件的初始化和安装
如果(http_plugin !应用().initialize(命令行参数个数,argv))
返回INITIALIZE_FAIL;
initialize_logging ();

  .startup
 <代码>应用程序()();//启动插件
  
  应用().exec ();//网络服务器启动 
  

}   

1, P2P通信构建
1.1初始化构建网络
http-server-address=172.26.247.122:8886//HTTP服务器
p2p-listen-endpoint=172.26.247.122:9006//节点服务器
p2p-server-address=172.26.247.122:9006

  

#这里我们同步9004年和9005年的数据
p2p-peer-address=172.26.247.122:9004
p2p-peer-address=172.26.247.122:9005

  

因为只有21个节点,所以,就可以直接设定了,无需太多动态需求。

  

接收网络信息
我→start_listen_loop ();进入监听循环
汽车插座=std:: make_shared (std::裁判(app () .get_io_service ()));//获io_service//返回 io_serv;
受体→async_accept (
插座,插座,这](boost::系统::error_code ec)
//从上面看的到,都是异步通信机制。
连接。插入(c);
start_session (c);//111年开始处理
start_read_message (con);//111读取消息
康涅狄格州→process_next_message处理消息
msgHandler m (impl, shared_from_this ());//111处理不同的消息的函数

  

中间注册很多信号函数,网络线程通过push_transaction之发出函数发送信号到注册点,做发送操作。这个操作是信号注册的响应函数。

  

1接收交易
空白net_plugin_impl:: handle_message (connection_ptr c, const packed_transaction, msg) {
//存储在received_transactions列表里
调度员→recv_transaction (c, tid);
//received_transactions.emplace_back ((transaction_origin) c {id});
chain_plug→accept_transaction ();
on_incoming_transaction_async ();//Productor初始化时候注册
{
send_response()//错误则返回响应
chain.push_transaction (std:: make_shared(*硫氧还蛋白),期限),
}
2接收握手信息
Handle_message ()
1消息正确
2节点ID重复(不要自己链接自己)
3链ID一样
4协议版本是否一样
所有错误都发送:go_away_message(错误类型)
5如果(! authenticate_peer(味精)){//认证对方
elog(“对等不是身份验证。关闭连接!”);
c→排队(go_away_message(身份验证),
返回;
}
6 sync_master→recv_handshake (c,味精);//互相检测各自链的状态,并开始同步区块数据
//同步需要检查;(自由==最后不可逆转的块)
//
//0。我的头块id==同行头id意味着我们都caugnt块智慧
//1。我的头块num & lt;同伴自由——开始同步本地
//2。我自由的在同行头num -发送一个last_irr_catch_up注意如果不是第一代
//
//3我的头块num & lt;=同伴的头块num -更新同步状态和发送一个酱请求
//4我的头块num祝辞同行块num ssend通知酱如果不是第一代

  

点击关注:
 EOS代码分析5接收网络信息

EOS代码分析5接收网络信息