千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,网络部分:Main(){app().set_version(eosio::nodeos::config::version);app().register_plugin(); //通过register_
千家信息网最后更新 2026年10月31日EOS代码分析5 接收网络信息

网络部分:
Main()
{
app().set_version(eosio::nodeos::config::version);
app().register_plugin(); //通过register_plugin()函数将插件注册到application的plugins插件集合中,plugins是一个map容器
auto root = fc::app_path(); //设定数据和配置路径
app().set_default_data_dir(root / "eosio/nodeos/data" );
app().set_default_config_dir(root / "eosio/nodeos/config" );

//应用程序初始化部分:1、输入参数处理,2、插件的初始化和安装
if(!app().initialize(argc, argv))
return INITIALIZE_FAIL;
initialize_logging();

  app().startup();  //启动插件  app().exec();  //网络服务器启动

}

1、P2P通信构建
1.1 初始化构建网络
http-server-address = 172.26.247.122:8886 //HTTP Server
p2p-listen-endpoint = 172.26.247.122:9006 //Node Server
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个节点,所以,就可以直接设定了,无需太多动态需求。

接收网络信息
my->start_listen_loop(); 进入监听循环
auto socket = std::make_shared( std::ref( app().get_io_service() ) ); //获io_service //return io_serv;
acceptor->async_accept(
socket, [socket,this]( boost::system::error_code ec )
//从上面看到,都是异步通信机制。
connections.insert( c );
start_session( c ); //111 开始处理
start_read_message( con ); //111 读取消息
conn->process_next_message 处理消息
msgHandler m(impl, shared_from_this() ); //111 处理不同的消息的函数

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

1接收交易
void net_plugin_impl::handle_message( connection_ptr c, const packed_transaction &msg) {
//存储在received_transactions列表里
dispatcher->recv_transaction(c, tid);
//received_transactions.emplace_back((transaction_origin){id, c});
chain_plug->accept_transaction();
on_incoming_transaction_async(); //Productor初始化时候注册
{
send_response() //错误则返回响应
chain.push_transaction(std::make_shared(*trx), deadline);
}
2 接收握手信息
Handle_message()
1 消息正确
2 node ID重复(不要自己链接自己)
3 chain ID 一样
4 协议版本是否一样
所有错误都发送:go_away_message(错误类型)
5 if(!authenticate_peer(msg)) { //认证对方
elog("Peer not authenticated. Closing connection.");
c->enqueue(go_away_message(authentication));
return;
}
6 sync_master->recv_handshake(c,msg); //互相检测各自链的状态,并开始同步区块数据
// sync need checks; (lib == last irreversible block)
//
// 0. my head block id == peer head id means we are all caugnt up block wise
// 1. my head block num < peer lib - start sync locally
// 2. my lib > peer head num - send an last_irr_catch_up notice if not the first generation
//
// 3 my head block num <= peer head block num - update sync state and send a catchup request
// 4 my head block num > peer block num ssend a notice catchup if this is not the first generation

点击关注:

网络 函数 插件 消息 处理 信号 数据 错误 信息 部分 同步 通信 不同 动态 区块 参数 只有 容器 对方 应用程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 金融科技还是互联网 腾讯阿里互联网科技 互联网 科技公司 浩特互联网科技 国外互联网科技网站 互联网科技生活的内容 健康食品互联网创新科技园项目 西安小鹰速贷互联网科技有限公司 晋城互联网科技 世界互联网领先科技成果获奖 卓翼科技产业互联网合作 怎样加入科技互联网 产业互联网科技服务公司 浙南科技城互联网大厦招聘 互联网科技融合创新 九思连强互联网电子科技有限公司 容联科技互联网电商 互联网公司属于科技吗 科技互联网专业务虚会材料 重庆科技产业互联网有哪些 互联网是第几次科技革命的成果 广州百单互联网科技有限公司 互联网科技活动banner 互联网与科技金融数据 互联网科技论文 上海致骋互联网科技 互联网科技咨询 佛山市拉法互联网科技有限公司 互联网科技公司营业执照怎么办理 华中科技大学互联网的牛人
0