go語言grpc接口 go語言調(diào)用c接口

Golang gRPC實(shí)現(xiàn)內(nèi)網(wǎng)穿透

內(nèi)網(wǎng)穿透即是使用公網(wǎng)服務(wù)器作為代理,轉(zhuǎn)發(fā)內(nèi)網(wǎng)(如辦公室、家里)的網(wǎng)絡(luò)請求使其能夠在外網(wǎng)中被訪問到。

目前成都創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、伊通網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

server端監(jiān)聽兩個(gè)端口,一個(gè)用來和接收用戶的http請求,一個(gè)監(jiān)聽gRPC客戶端,和內(nèi)網(wǎng)服務(wù)器進(jìn)行通信;

client啟動(dòng)時(shí)連接server端;

當(dāng)User請求server http端口時(shí),將http進(jìn)行阻塞,并將User請求內(nèi)容通過gRPC發(fā)給client;

client將從server收到的請求發(fā)往本地的http服務(wù);

client將從本地程序收到的http response通過gRPC發(fā)送給server;

server結(jié)束http阻塞,將從client收到的http response發(fā)給User。

github地址:

gRPC服務(wù)開發(fā)和接口測試初探「Go」

之前寫過了Grpc服務(wù)開發(fā)和接口測試初探【Java】,中間耽擱了一些時(shí)間,Go版本的gRPC測試開發(fā)實(shí)踐才有時(shí)間學(xué)習(xí)使用。其中也是由于自己Go語言不夠熟悉導(dǎo)致的。之前有段時(shí)間想暫時(shí)放棄Go語言的學(xué)習(xí),導(dǎo)致了Go的生疏,原因是從Groovy到Java性能。

回歸正題,Go語言版本的gRPC實(shí)踐相對Java來說是比較簡單的,但是總體的工具鏈?zhǔn)潜容^復(fù)雜的,可能是因?yàn)镚o生態(tài)目前相比Java還是比較匱乏吧。下面我先簡述一下大致的步驟:

以上步驟親自操作可能會(huì)遇到一些小問題,我本人搜到的教程什么的也是亂七八糟,踩了一些坑。我沒有整理出一個(gè)親自實(shí)踐之后的可行的教程,原因有二:

Go語言的gRPC的 proto 編寫跟Java大致一致,只有一個(gè)報(bào)名的參數(shù)不太一樣。下面是我的 Hello.proto 內(nèi)容:

這里主要 go_package 網(wǎng)上搜到的配置方式有些不一樣,我沒有全都嘗試,大家在搜索的資料時(shí)候,盡量先看看 syntax 這個(gè)參數(shù)的值,以及文章教程寫作的時(shí)間,如果距離現(xiàn)在太久了,我建議直接關(guān)掉。搜索引擎有過濾功能,可以過濾掉過時(shí)的教程。

這里Go語言gRPC的一點(diǎn)優(yōu)勢,就是在一個(gè)項(xiàng)目中即可實(shí)現(xiàn),Java需要先弄一個(gè)SDK這樣。Go語言的gRPC的代碼可以通過生成代碼命令中的參數(shù)實(shí)現(xiàn)指定路徑。我是放在了和 proto 文件的同級目錄。

服務(wù)端代碼也是比較格式化的內(nèi)容,如下:

其中 pb.RegisterHelloServiceServer(s, Ser{}) 如果報(bào)錯(cuò),請檢查自己安裝的工具 protoc-gen-go 或者 protoc-gen-gofast 版本,一般提取報(bào)錯(cuò) message 搜索也能得到解決辦法。

下面是客戶端的代碼,由于學(xué)藝不精,其中大部分參數(shù)的含義目前我也不是很清楚,特別是基于 stream 的請求響應(yīng)的方式使用。后面我先把Java的學(xué)完,再回過頭來看Go的,按照這個(gè)順序?qū)W習(xí)和分享。

服務(wù)端輸出:

忘記打日志了。沒有輸出

客戶端輸出:

Go語言的gRPC測試開發(fā)實(shí)踐已經(jīng)完事兒,大概率上我不會(huì)在工作中使用Go作為主力gRPC測試語言,后面測試實(shí)踐內(nèi)容還是會(huì)以Java為主。

GoLang -- gRPC框架四大服務(wù)

在 gRPC 里客戶端應(yīng)用可以像調(diào)用本地對象一樣直接調(diào)用另一臺不同的機(jī)器上服務(wù)端 應(yīng)用的方法,使得您能夠更容易地創(chuàng)建分布式應(yīng)用和服務(wù)。與許多 RPC 系統(tǒng)類似,gRPC 也是基于以下理念:定義一個(gè)服務(wù),指定其能夠被遠(yuǎn)程調(diào)用的方法(包含參數(shù)和返回類型)。在服務(wù)端實(shí)現(xiàn)這個(gè)接口,并運(yùn)行一個(gè) gRPC 服務(wù)器來處理客戶端調(diào)用。在客戶端擁有一個(gè)存根能夠像服務(wù)端一樣的方法。

gRPC 客戶端和服務(wù)端可以在多種環(huán)境中運(yùn)行和交互 - 從 google 內(nèi)部的服務(wù)器到你自己的筆記本,并且可以用任何 gRPC 支持的語言來編寫。所以,你可以很容易地用 Java 創(chuàng)建一個(gè) gRPC 服務(wù)端,用 Go、Python、Ruby 來創(chuàng)建客戶端。此外,Google 最新 API 將有 gRPC 版本的接口,使你很容易地將 Google 的功能集成到你的應(yīng)用里。

gRPC 默認(rèn)使用 protocol buffers,這是 Google 開源的一套成熟的結(jié)構(gòu)數(shù)據(jù)序列化機(jī)制(當(dāng)然也可以使用其他數(shù)據(jù)格式如 JSON)。名叫 proto3 的新風(fēng)格的 protocol buffers,它擁有輕量簡化的語法、一些有用的新功能,并且支持更多新語言。當(dāng)前針對 Java 和 C++ 發(fā)布了 beta 版本,針對 JavaNano(即 Android Java)發(fā)布 alpha 版本,在protocol buffers Github 源碼庫里有 Ruby 支持, 在golang/protobuf Github 源碼庫里還有針對 Go 語言的生成器, 對更多語言的支持正在開發(fā)中。

有了 gRPC, 我們可以一次性的在一個(gè) .proto 文件中定義服務(wù)并使用任何支持它的語言去實(shí)現(xiàn)客戶端和服務(wù)器,反過來,它們可以在各種環(huán)境中,從Google的服務(wù)器到你自己的平板電腦—— gRPC 幫你解決了不同語言及環(huán)境間通信的復(fù)雜性.使用 protocol buffers 還能獲得其他好處,包括高效的序列號,簡單的 IDL 以及容易進(jìn)行接口更新。

現(xiàn)在讓我們來仔細(xì)了解一下當(dāng) gRPC 客戶端調(diào)用 gRPC 服務(wù)端的方法時(shí)到底發(fā)生了什么。我們不究其實(shí)現(xiàn)細(xì)節(jié),關(guān)于實(shí)現(xiàn)細(xì)節(jié)的部分,你可以在我們的特定語言頁面里找到更為詳盡的內(nèi)容。

首先我們來了解一下最簡單的 RPC 形式:客戶端發(fā)出單個(gè)請求,獲得單個(gè)響應(yīng)。

服務(wù)端流式 RPC 除了在得到客戶端請求信息后發(fā)送回一個(gè)應(yīng)答流之外,與我們的簡單例子一樣。在發(fā)送完所有應(yīng)答后,服務(wù)端的狀態(tài)詳情(狀態(tài)碼和可選的狀態(tài)信息)和可選的跟蹤元數(shù)據(jù)被發(fā)送回客戶端,以此來完成服務(wù)端的工作。客戶端在接收到所有服務(wù)端的應(yīng)答后也完成了工作。

客戶端流式 RPC 也基本與我們的簡單例子一樣,區(qū)別在于客戶端通過發(fā)送一個(gè)請求流給服務(wù)端,取代了原先發(fā)送的單個(gè)請求。服務(wù)端通常(但并不必須)會(huì)在接收到客戶端所有的請求后發(fā)送回一個(gè)應(yīng)答,其中附帶有它的狀態(tài)詳情和可選的跟蹤數(shù)據(jù)。

雙向流式 RPC ,調(diào)用由客戶端調(diào)用方法來初始化,而服務(wù)端則接收到客戶端的元數(shù)據(jù),方法名和截止時(shí)間。服務(wù)端可以選擇發(fā)送回它的初始元數(shù)據(jù)或等待客戶端發(fā)送請求。 下一步怎樣發(fā)展取決于應(yīng)用,因?yàn)榭蛻舳撕头?wù)端能在任意順序上讀寫 - 這些流的操作是完全獨(dú)立的。例如服務(wù)端可以一直等直到它接收到所有客戶端的消息才寫應(yīng)答,或者服務(wù)端和客戶端可以像"乒乓球"一樣:服務(wù)端后得到一個(gè)請求就回送一個(gè)應(yīng)答,接著客戶端根據(jù)應(yīng)答來發(fā)送另一個(gè)請求,以此類推。

通過運(yùn)行下面的命令克隆并安裝grpc-go代碼庫:

下載protobuf源碼包

安裝golang-protobuf

第一步使用 protocol buffers去定義 gRPC service 和方法 request 以及 response 的類型。

要定義一個(gè)服務(wù),必須在.proto 文件中指定 service:

然后在服務(wù)中定義 rpc 方法,指定請求的和響應(yīng)類型,gRPC 允許定義4種類型的 service 方法。

服務(wù).proto文件如下所示:

名稱欄目:go語言grpc接口 go語言調(diào)用c接口
本文路徑:http://www.muchs.cn/article8/dohieip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、小程序開發(fā)網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站維護(hù)、企業(yè)建站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)