摘要:首先讀取請求內容,解析請求,接著匹配相應的路由項,隨后調用路由項的回調函數來處理。每一個路由項由請求方法和回調函數組成將監聽地址作為參數,最終執行開始服務于外部請求創建對象首先,實例化對象。我們可以看到一條項由和對應的回調函數組成。
作者:Derek
簡介Github地址:https://github.com/Bytom/bytom
Gitee地址:https://gitee.com/BytomBlockc...
本章介紹bytom代碼Api-Server接口服務
作者使用MacOS操作系統,其他平臺也大同小異Api-Server接口服務Golang Version: 1.8
Api Server是比原鏈中非常重要的一個功能,在比原鏈的架構中專門服務于bytomcli和dashboard,他的功能是接收并處理用戶和礦池相關的請求。默認啟動9888端口??傊饕δ苋缦拢?/p>
接收并處理用戶或礦池發送的請求
管理交易:打包、簽名、提交等操作
管理本地比原錢包
管理本地p2p節點信息
管理本地礦工挖礦操作等
在Api Server服務過程中,在監聽地址listener上接收bytomcli或dashboard的請求訪問。對每一個請求,Api Server均會創建一個新的goroutine來處理請求。首先Api Server讀取請求內容,解析請求,接著匹配相應的路由項,隨后調用路由項的Handler回調函數來處理。最后Handler處理完請求之后給bytomcli響應該請求。
Api-Server源碼分析在bytomd啟動過程中,bytomd使用golang標準庫http.NewServeMux()創建一個router路由器,提供請求的路由分發功能。創建Api Server主要有三部分組成:
初始化http.NewServeMux()得到mux
為mux.Handle添加多個有效的router路由項。每一個路由項由HTTP請求方法(GET、POST、PUT、DELET)、URL和Handler回調函數組成
將監聽地址作為參數,最終執行Serve(listener)開始服務于外部請求
創建Api對象node/node.go
func (n *Node) initAndstartApiServer() { n.api = api.NewAPI(n.syncManager, n.wallet, n.txfeed, n.cpuMiner, n.miningPool, n.chain, n.config, n.accessTokens) listenAddr := env.String("LISTEN", n.config.ApiAddress) env.Parse() n.api.StartServer(*listenAddr) }
api/api.go
func NewAPI(sync *netsync.SyncManager, wallet *wallet.Wallet, txfeeds *txfeed.Tracker, cpuMiner *cpuminer.CPUMiner, miningPool *miningpool.MiningPool, chain *protocol.Chain, config *cfg.Config, token *accesstoken.CredentialStore) *API { api := &API{ sync: sync, wallet: wallet, chain: chain, accessTokens: token, txFeedTracker: txfeeds, cpuMiner: cpuMiner, miningPool: miningPool, } api.buildHandler() api.initServer(config) return api }
首先,實例化api對象。Api-server管理的事情很多,所以參數也相對較多。
listenAddr本地端口,如果系統沒有設置LISTEN變量則使用config.ApiAddress配置地址,默認為9888
NewAPI函數我們看到有三個操作:
實例化api對象
api.buildHandler添加router路由項
api.initServer實例化http.Server,配置auth驗證等
router路由項func (a *API) buildHandler() { walletEnable := false m := http.NewServeMux() if a.wallet != nil { walletEnable = true m.Handle("/create-account", jsonHandler(a.createAccount)) m.Handle("/list-accounts", jsonHandler(a.listAccounts)) m.Handle("/delete-account", jsonHandler(a.deleteAccount)) // ... } }
router路由項過多。這里只介紹關于賬號相關的handler。其他的handler大同小異。
m.Handle("/create-account", jsonHandler(a.createAccount))
我們可以看到一條router項由url和對應的handle回調函數組成。當我們請求的url匹配到/create-account時,Api-Server會執行a.createAccount函數,并將用戶的傳參也帶過去。
啟動Api-Server服務api/api.go
func (a *API) StartServer(address string) { log.WithField("api address:", address).Info("Rpc listen") listener, err := net.Listen("tcp", address) if err != nil { cmn.Exit(cmn.Fmt("Failed to register tcp port: %v", err)) } go func() { if err := a.server.Serve(listener); err != nil { log.WithField("error", errors.Wrap(err, "Serve")).Error("Rpc server") } }() }
通過golang標準庫net.listen方法,監聽本地的地址端口。由于http服務是一個持久運行的服務,我們啟動一個go程專門運行http服務。當運行a.server.Serve沒有任何報錯時,我們可以看到服務器上啟動的9888端口。此時Api-Server已經處于等待接收用戶的請求。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24215.html
摘要:函數總共操作有兩步從緩存中查詢值,如果查到則返回如果為從緩存中查詢到則回調回調函數?;卣{函數會將從磁盤上獲得到塊信息存儲到緩存中并返回該塊的信息。回調函數實際上調取的是下的,它會從磁盤中獲取信息并返回。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc......
摘要:只有當觸發了或才能終止進程退出。退出時執行如下操作會將挖礦功能停止,網絡停止等操作。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介紹bytom代碼啟動、節點初始化、及停止的過程 作者使用MacOS操作系統,其他平臺也大同小異Golang V...
摘要:函數總共操作有兩步從緩存中查詢值,如果查到則返回如果為從緩存中查詢到則回調回調函數。回調函數會將從磁盤上獲得到塊信息存儲到緩存中并返回該塊的信息?;卣{函數實際上調取的是下的,它會從磁盤中獲取信息并返回。 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介紹Dere...
摘要:作者簡介地址地址本章介紹代碼網絡中端口映射作者使用操作系統,其他平臺也大同小異介紹通用即插即用。端口映射將一個外部端口映射到一個內網。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介紹bytom代碼P2P網絡中upnp端口映射 作者使用Mac...
摘要:作者簡介地址地址本章介紹代碼網絡中地址簿作者使用操作系統,其他平臺也大同小異介紹用于存儲網絡中保留最近的對端節點地址在下,默認的地址簿路徑存儲在地址簿格式地址類型在中存儲的地址有兩種標識新地址,不可靠地址未成功連接過。 作者:Derek 簡介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomB...
閱讀 2111·2021-11-24 10:28
閱讀 1115·2021-10-12 10:12
閱讀 3337·2021-09-22 15:21
閱讀 679·2021-08-30 09:44
閱讀 1895·2021-07-23 11:20
閱讀 1147·2019-08-30 15:56
閱讀 1751·2019-08-30 15:44
閱讀 1483·2019-08-30 13:55