中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EOS代碼分析5 接收網絡信息

發布時間:2020-04-08 00:17:25 來源:網絡 閱讀:341 作者:chajiuke王超 欄目:安全技術

網絡部分:
Main()
{
app().set_version(eosio::nodeos::config::version);
app().register_plugin<history_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<chain_plugin, http_plugin, net_plugin, producer_plugin>(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<tcp::socket>( 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<transaction_metadata>(*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

點擊關注:
EOS代碼分析5 接收網絡信息

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

津南区| 滦平县| 高台县| 青冈县| 佛山市| 揭阳市| 伊川县| 鄄城县| 舟山市| 古交市| 台江县| 蒙城县| 延边| 涟源市| 科技| 雷州市| 图木舒克市| 当雄县| 长治市| 辽中县| 建瓯市| 青岛市| 黄冈市| 修文县| 长沙县| 攀枝花市| 康乐县| 防城港市| 扎囊县| 桃江县| 东源县| 阿拉善左旗| 哈尔滨市| 中超| 枣阳市| 灌南县| 织金县| 汪清县| 吐鲁番市| 竹溪县| 左云县|