日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5行代码帮你梳理EOS.IO的脉络

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5行代码帮你梳理EOS.IO的脉络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EOS號稱Blockchain上的操作系統,且白皮書和開發日志都描述的非常美好,同時也有無數人看好這個項目,但對于一個開源項目來說,再好的愿景,還是需要實際產品的支撐,永遠都要記住

Talk is cheap, show me the code...

這篇文章的目的是幫助梳理EOS.IO的核心——?eosiod的代碼脈絡,為后續深入研究源碼打下基礎。

本文假設你已經下載了EOS.IO的代碼及你有一定的?C++語言基礎,代碼的路徑在

https://github.com/EOSIO/eos/

EOS.IO項目包括好幾個程序,它們的入口?main()函數都在programs目錄下,如下所示,我列出了重要的幾個程序,其中我們最關心的是?eosiod,其次可能是eosio-walletd和?eosioc了,本文中涉及的代碼基于EOS DAWN3.0 alpha。

下面來一探eosiod的究竟,打開?programs/eosiod/main.cpp文件,我們可以看到main非常簡單,核心代碼就5行,為了方便表述,我把異常處理、版本設置和日志輸出等非核心部分都省略了

這四行代碼分別起到什么作用呢?

其中最關鍵的應該是第①行,它完成了3個插件的初始化工作(EOS項目里運用了大量的泛型模板編程,也靈活運用了?C++1x的變長模板參數的特性,對于想學習最新C++特性的同學,這是一個很好的案例),從這一行可以看出,?eosiod程序是一個插件化的框架,其中的所有功能,都是由插件實現的,你想要eosiod具備什么能力,組合不同的插件就好了。?eos項目下的plugins目錄含有?Dawn3.0的所有插件的實現,如下:

而在當前代碼中,只加載了chain_plugin、?http_plugin和net_plugin這三個插件,從命名上,可以猜想它們可能是區塊鏈插件、http協議插件(與eosioc交互)以及P2P網絡插件,知道了這一點,我們后續就可以針對性的去研究對應的實現了。

第②行代碼沒有什么可說的,完成了日志的初始化工作。

我們來看第③行,startup函數的實現也很簡單

上面這幾行代碼的功能是,對每一個成功初始化的插件,調用它們的startup()函數,看?startup這個詞就知道,這個函數的功能是做一些初始參數的設定。

最后來看第④行,也很簡單,它的核心實現就一行代碼io_serv->run()

我們來看下io_serv是什么,在?libraries/appbase/include/appbase/application.hpp中,對io_serv有以下聲明

這是一個boost庫中的?異步IO服務,這個服務提供一個run()函數,可以讓這個程序一直運行下去,對于這點,做過服務器的同學就應該很熟悉了。

等等,不是說5行代碼嗎?怎么感覺4行就已經完事兒了?這里要注意的是,還有一行代碼,它不在main()函數中,它在每個插件的頭文件中,用來在main()執行前,把所有的插件都注冊到系統中,以?http_plugin.cpp文件作為例子,就是下面這行代碼

再追到register_plugin中去看看,它在?application.hpp中

看清楚了把,這個注冊函數完成了2件事

  • 檢查插件是否注冊過,注冊過就直接退出,防止多次注冊

  • 如果沒有注冊過,就分配一個新的插件對象,然后插入到plugins中,?plugins是一個map容器

  • 上面的map容器,和最開始第①步中的插件初始化有一定的關聯,邏輯是先把所有插件注冊到容器中,然后再初始化第①步中指定的插件,?register_dependencies()就不展開了,它會調用不同插件的plugin_requires()實現。

    至此,我們通過5行代碼,我們了解到eosiod服務運行的大致脈絡,且學習到它是一個插件化服務器,同時可以推斷所有的?eosiod的行為來自于網絡輸入,即http_plugin和?net_plugin兩個模塊,知道這些后,后續我們就可以針對性的去閱讀每一個核心模塊了。

    原文地址:?https://juejin.im/entry/5a7be1adf265da4e9e304e80

    總結

    以上是生活随笔為你收集整理的5行代码帮你梳理EOS.IO的脉络的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。