真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言rpc go語言rpc使用

一學(xué)就會,手把手教你用Go語言調(diào)用智能合約

智能合約調(diào)用是實(shí)現(xiàn)一個(gè) DApp 的關(guān)鍵,一個(gè)完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。

在宜城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,宜城網(wǎng)站建設(shè)費(fèi)用合理。

我們先來了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運(yùn)行在以太坊節(jié)點(diǎn)的 EVM 中。因此要 想調(diào)用合約必須要訪問某個(gè)節(jié)點(diǎn)。

以后端程序?yàn)槔蠖朔?wù)若想連接節(jié)點(diǎn)有兩種可能,一種是雙 方在同一主機(jī),此時(shí)后端連接節(jié)點(diǎn)可以采用 本地 IPC(Inter-Process Communication,進(jìn) 程間通信)機(jī)制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)機(jī)制;另 一種情況是雙方不在同一臺主機(jī),此時(shí)只能采用 RPC 機(jī)制進(jìn)行通信。

提到 RPC, 讀者應(yīng)該對 Geth 啟動(dòng)參數(shù)有點(diǎn)印象,Geth 啟動(dòng)時(shí)可以選擇開啟 RPC 服務(wù),對應(yīng)的 默認(rèn)服務(wù)端口是 8545。。

接著,我們來了解一下智能合約運(yùn)行的過程。

智能合約的運(yùn)行過程是后端服務(wù)連接某節(jié)點(diǎn),將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點(diǎn),節(jié)點(diǎn)在驗(yàn)證了交易的合法性后進(jìn)行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。

就像數(shù)據(jù)庫一樣,每個(gè)區(qū)塊鏈平臺都會提供主流 開發(fā)語言的 SDK(Software Development Kit,軟件開發(fā)工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節(jié)點(diǎn)、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。

總結(jié)一下,智能合約被調(diào)用的兩個(gè)關(guān)鍵點(diǎn)是節(jié)點(diǎn)和 SDK。

由于 IPC 要求后端與節(jié)點(diǎn)必須在同一主機(jī),所以很多時(shí)候開發(fā)者都會采用 RPC 模式。除了 RPC,以太坊也為開發(fā)者提供了 json- rpc 接口,本文就不展開討論了。

接下來介紹如何使用 Go 語言,借助 go-ethereum 源碼庫來實(shí)現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來說一下總體步驟,以下面的合約為例。

步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。

最好能將 calldemo.abi 單獨(dú)保存在一個(gè)目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:

步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點(diǎn)。因此 Environment 選擇為 Web3 Provider。

在【Environment】選項(xiàng)框中選擇“Web3 Provider”,然后單擊【Deploy】按鈕。

部署后,獲得合約地址為:0xa09209c28AEf59a4653b905792a9a910E78E7407。

步驟 03:利用 abigen 工具(Geth 工具包內(nèi)的可執(zhí)行程序)編譯智能合約為 Go 代碼。abigen 工具的作用是將 abi 文件轉(zhuǎn)換為 Go 代碼,命令如下:

其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結(jié)構(gòu)類型。 (3)pkg:指定輸出文件 package 名稱。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開該文件欣賞一下,注意不要修改它。

步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。

步驟 04:設(shè)置 go mod,以便工程自動(dòng)識別。

前面有所提及,若要使用 Go 語言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:

該指令會自動(dòng)將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯(cuò)。不過,Go 語言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴工程的事情就不必關(guān)心了。

接下來設(shè)置 module 生效和 GOPROXY,命令如下:

在項(xiàng)目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。

步驟 05:運(yùn)行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。

上述輸出信息中,可以看到 Go 語言會自動(dòng)下載依賴文件,這就是 go mod 的神奇之處。看到 2020,相信讀者也知道運(yùn)行結(jié)果是正確的了。

Go微服務(wù)--常見的微服務(wù)框架

近幾年誕生了很多微服務(wù)框架,比如JAVA的Spring Cloud、Dubbo;Golang的GoKit和GoMicro以及NodeJs的Seneca。幾乎每種主流語言都有其對應(yīng)的微服務(wù)框架。

Go在微服務(wù)框架中有其獨(dú)特的優(yōu)勢,至于優(yōu)勢在哪,自行g(shù)oogle。

1、GoKit框架

這是一個(gè)工具包的集合,可以幫助攻城獅構(gòu)建強(qiáng)大、可靠和可維護(hù)的微服務(wù)。提供了用于實(shí)現(xiàn)系統(tǒng)監(jiān)控和彈性模式組件的庫,例如日志、跟蹤、限流、熔斷等。

基于這個(gè)框架的應(yīng)用程序架構(gòu)由三個(gè)主要的部分組成:

傳輸層:用于網(wǎng)絡(luò)通信,服務(wù)通常使用HTTP或者gRPC等網(wǎng)絡(luò)傳輸協(xié)議,或者使用NATS等發(fā)布訂閱系統(tǒng)相互通信。

接口層:是服務(wù)器和客戶端的基本構(gòu)建塊。每個(gè)對外提供的接口方法都會定義為一個(gè)Endpoint,一遍在服務(wù)器和客戶端之間進(jìn)行網(wǎng)絡(luò)通信,每個(gè)端點(diǎn)使用傳輸層通過HTTP或gRPC等具體通信模式對外提供服務(wù)

服務(wù)成:具體的業(yè)務(wù)邏輯實(shí)現(xiàn)

2、GoMicro框架

這是一個(gè)基于Go語言實(shí)現(xiàn)的插件化RPC微服務(wù)框架。提供了服務(wù)發(fā)現(xiàn)、負(fù)載均衡、同步傳輸、異步通信以及事件驅(qū)動(dòng)等機(jī)制,嘗試簡化分布式系統(tǒng)之間的通信,讓開發(fā)者更專注于自身業(yè)務(wù)邏輯的開發(fā)。

GoMicro的設(shè)計(jì)哲學(xué)是可插拔的架構(gòu)理念,提供了可快速構(gòu)建系統(tǒng)的組件,并且可以根據(jù)自身的需求對GoMicro提供的默認(rèn)實(shí)現(xiàn)進(jìn)行定制。所有插件都可在倉庫github.com/micro/go-plugins 中找到。

hyperf與go基于jsonrpc2.0通信

現(xiàn)在微服務(wù)很流行,很多的語言都有自己的rpc框架,在同一框架內(nèi)的微服務(wù)之間通信很方便,筆者工作時(shí)用到的框架是hyperf,自帶jsonrpc、grpc組件,grpc用起來略感繁瑣,調(diào)試起來也不方便,因此選用jsonrpc-http,損失些許通信成本在可接受范圍之內(nèi),能用postman調(diào)試實(shí)在是太方便了。

隨著業(yè)務(wù)和團(tuán)隊(duì)的不斷發(fā)展,開始有多語言開發(fā)需求,我們的另一個(gè)項(xiàng)目是用go搭建的,hyperf與go之間也打算用jsonrpc,go自帶jsonrpc包,但是是jsonrpc1.0的,與hyperf不兼容,經(jīng)過努力,找到一個(gè)jsonrpc2.0的包( go-jsonrpc ),與hyperf完美兼容。

從0開始手?jǐn)]一個(gè)高性能rpc框架

相信社區(qū)上現(xiàn)在還有不少人對前后端交互或者遠(yuǎn)程系統(tǒng)間調(diào)用的理解還是停留在 http 調(diào)用的層面。以 http 協(xié)議的形式發(fā)起的調(diào)用,其實(shí)就是一種 rpc 調(diào)用。在分布式/微服務(wù)環(huán)境中,前端/客戶端發(fā)起的一個(gè)調(diào)用,可能會經(jīng)過后端數(shù)十個(gè)服務(wù),所以每個(gè)服務(wù)之間的通信效率就顯得非常重要。http1.x 是文本協(xié)議,文本協(xié)議的傳輸效率比較低下,這必然會導(dǎo)致整個(gè)鏈路的耗時(shí)成本增加。所以如何解決分布式/微服務(wù)環(huán)境中的服務(wù)間的通信問題,是我們通向一個(gè)資深工程師的必經(jīng)之路。這就是 rpc 框架設(shè)計(jì)的初衷。

一提到 rpc ,大家可能就條件反射地想到 java 的 dubbo 和 google 的 grpc。但是假如把對 dubbo 和 grpc 了解能到 50% 以上的人篩選一遍,可能就十不足一。為什么呢?

因?yàn)榻^大多數(shù)開發(fā)者僅僅是框架的使用者,很少會去看框架的源碼。就算去看源碼,可能也會非常吃力、云里霧里。原因有二:

我們的 gorpc 框架就 提供給了大家一個(gè)各項(xiàng)功能完整的,剛實(shí)現(xiàn)從 0 到 1這個(gè)過程的框架。并且一步步給大家解析了每個(gè)功能的具體實(shí)現(xiàn)思路和實(shí)現(xiàn)過程,這是非常難得的 。

本課程主要從一個(gè)開發(fā)者的角度,從技術(shù)選型到編碼實(shí)現(xiàn),從 0 到 1去實(shí)現(xiàn)一款高性能 rpc 框架,主要技術(shù)點(diǎn)包括 client 和 server 通訊、超時(shí)機(jī)制實(shí)現(xiàn)、協(xié)議的制定、傳輸層 transport 實(shí)現(xiàn)、編解碼、序列化、連接池、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、攔截器、分布式鏈路追蹤、認(rèn)證鑒權(quán)、組件化、插件體系、框架性能優(yōu)化等。

課程特色

框架特色

我們知道,其實(shí)世面上有非常多的 rpc 框架了。java 有阿里的 dubbo、微博的 motan 等,go 有 grpc、rpcx、go-micro 等。那 gorpc 框架跟這些框架有什么優(yōu)勢呢?個(gè)人進(jìn)行總結(jié)一下,

所以如果我們自己去實(shí)現(xiàn)一款框架,我們希望這款框架的核心特點(diǎn)是: 簡單易用、高性能、可插拔

框架架構(gòu)如下:

具體特性如下:

章節(jié)預(yù)覽思維導(dǎo)圖如下:

為什么使用 go 實(shí)現(xiàn)

相比于 java 和 c++ 的厚重性和一些 歷史 包袱而言,go 更加簡潔、優(yōu)雅。并且 go 天然支持高并發(fā)。這些特點(diǎn)使得 go 目前得到越來越廣泛的關(guān)注和使用。我們使用 go 實(shí)現(xiàn)是因?yàn)?go 的這些語言特性,同時(shí)也因?yàn)?go 實(shí)現(xiàn)的框架源碼的非常易讀,有助于學(xué)習(xí)和成長。


新聞標(biāo)題:go語言rpc go語言rpc使用
網(wǎng)頁URL:http://weahome.cn/article/hjojgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部