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

成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設、網(wǎng)站制作、成都網(wǎng)站設計公司、網(wǎng)站定制、成都全網(wǎng)營銷、小程序制作、微信公眾號開發(fā)、成都網(wǎng)站營銷服務,提供專業(yè)營銷思路、內(nèi)容策劃、視覺設計、程序開發(fā)來完成項目落地,為活動板房企業(yè)提供源源不斷的流量和訂單咨詢。
gRPC 客戶端和服務端可以在多種環(huán)境中運行和交互 - 從 google 內(nèi)部的服務器到你自己的筆記本,并且可以用任何 gRPC 支持的語言來編寫。所以,你可以很容易地用 Java 創(chuàng)建一個 gRPC 服務端,用 Go、Python、Ruby 來創(chuàng)建客戶端。此外,Google 最新 API 將有 gRPC 版本的接口,使你很容易地將 Google 的功能集成到你的應用里。
gRPC 默認使用 protocol buffers,這是 Google 開源的一套成熟的結(jié)構(gòu)數(shù)據(jù)序列化機制(當然也可以使用其他數(shù)據(jù)格式如 JSON)。名叫 proto3 的新風格的 protocol buffers,它擁有輕量簡化的語法、一些有用的新功能,并且支持更多新語言。當前針對 Java 和 C++ 發(fā)布了 beta 版本,針對 JavaNano(即 Android Java)發(fā)布 alpha 版本,在protocol buffers Github 源碼庫里有 Ruby 支持, 在golang/protobuf Github 源碼庫里還有針對 Go 語言的生成器, 對更多語言的支持正在開發(fā)中。
有了 gRPC, 我們可以一次性的在一個 .proto 文件中定義服務并使用任何支持它的語言去實現(xiàn)客戶端和服務器,反過來,它們可以在各種環(huán)境中,從Google的服務器到你自己的平板電腦—— gRPC 幫你解決了不同語言及環(huán)境間通信的復雜性.使用 protocol buffers 還能獲得其他好處,包括高效的序列號,簡單的 IDL 以及容易進行接口更新。
現(xiàn)在讓我們來仔細了解一下當 gRPC 客戶端調(diào)用 gRPC 服務端的方法時到底發(fā)生了什么。我們不究其實現(xiàn)細節(jié),關于實現(xiàn)細節(jié)的部分,你可以在我們的特定語言頁面里找到更為詳盡的內(nèi)容。
首先我們來了解一下最簡單的 RPC 形式:客戶端發(fā)出單個請求,獲得單個響應。
服務端流式 RPC 除了在得到客戶端請求信息后發(fā)送回一個應答流之外,與我們的簡單例子一樣。在發(fā)送完所有應答后,服務端的狀態(tài)詳情(狀態(tài)碼和可選的狀態(tài)信息)和可選的跟蹤元數(shù)據(jù)被發(fā)送回客戶端,以此來完成服務端的工作。客戶端在接收到所有服務端的應答后也完成了工作。
客戶端流式 RPC 也基本與我們的簡單例子一樣,區(qū)別在于客戶端通過發(fā)送一個請求流給服務端,取代了原先發(fā)送的單個請求。服務端通常(但并不必須)會在接收到客戶端所有的請求后發(fā)送回一個應答,其中附帶有它的狀態(tài)詳情和可選的跟蹤數(shù)據(jù)。
雙向流式 RPC ,調(diào)用由客戶端調(diào)用方法來初始化,而服務端則接收到客戶端的元數(shù)據(jù),方法名和截止時間。服務端可以選擇發(fā)送回它的初始元數(shù)據(jù)或等待客戶端發(fā)送請求。 下一步怎樣發(fā)展取決于應用,因為客戶端和服務端能在任意順序上讀寫 - 這些流的操作是完全獨立的。例如服務端可以一直等直到它接收到所有客戶端的消息才寫應答,或者服務端和客戶端可以像"乒乓球"一樣:服務端后得到一個請求就回送一個應答,接著客戶端根據(jù)應答來發(fā)送另一個請求,以此類推。
通過運行下面的命令克隆并安裝grpc-go代碼庫:
下載protobuf源碼包
安裝golang-protobuf
第一步使用 protocol buffers去定義 gRPC service 和方法 request 以及 response 的類型。
要定義一個服務,必須在.proto 文件中指定 service:
然后在服務中定義 rpc 方法,指定請求的和響應類型,gRPC 允許定義4種類型的 service 方法。
服務.proto文件如下所示:
通過beego快速創(chuàng)建一個Restful風格API項目及API文檔自動化:
Go 語言構(gòu)建 RESTful Web 服務:
Golang中使用 JWT認證來 保障Restful JSON API的安全(英文):
polaris: 一個用go實現(xiàn)的支持restful的web框架:
關于RESTFUL API 安全認證方式的一些總結(jié):
有沒有人用golang實現(xiàn)過restful框架的實例:
Micro 一個用Go語言實現(xiàn)的微服務框架:
基于微服務庫的可插拔RPC go-micro:
golang適合做web開發(fā)嗎?:
a-survey-of-5-go-web-frameworks:
Ozzo Framework:
avelino/awesome-go:
Beego Framework:
golang其實不適合做web開發(fā):
Go語言現(xiàn)有Web開發(fā)框架:
使用Golang快速構(gòu)建WEB應用:
Martini 極好的 Go WEB 框架:
golang 有哪些比較穩(wěn)定的 web 開發(fā)框架?:
Go作為近兩年迅速流行起來的編程語言始終致力于使事情簡單化。它并未引入很多新概念,而是聚焦于打造一門簡單的語言,讓開發(fā)者使用起來感覺異常快速且簡單。相信有意向深入學習Go語言的小伙伴都在研究Go的開源項目,今天我就把自己覺得不錯的6個Go開源項目推薦給大家,希望大家能獲得收獲和成長。
推薦一:kubernetes 【Star:44418】
Kubernetes基于Docker,其目的是讓用戶通過Kubernetes集群來進行云端容器集群的管理,而無需用戶進行復雜的設置工作。系統(tǒng)會自動選取合適的工作節(jié)點來執(zhí)行具體的容器集群調(diào)度處理工作。
推薦二:etcd 【Star:21408】
etcd是由CoreOS開發(fā)并維護鍵值存儲系統(tǒng),它使用Go語言編寫,并通過Raft一致性算法處理日志復制以保證強一致性。目前,Google的容器集群管理系統(tǒng)Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。
推薦三:deis 【Star:6093】
Deis是一個基于Docker和CoreOS的開源PaaS平臺,旨在讓部屬和管理服務器上的應用變得輕松容易。它可以運行在AWS、GCE以及Openstack平臺下。
推薦四:flynn 【Star:6936】
Flynn是一個使用Go語言編寫的開源PaaS平臺,可自動構(gòu)建部署任何應用到Docker容器集群上運行。Flynn項目受到Y(jié) Combinator的支持,目前仍在開發(fā)中,被稱為是下一代的開源PaaS平臺。
推薦五:lime 【Star:13775】
相對上面的幾款Go語言在云端和服務器端之外,Lime則顯得比較特殊。Lime,則是一款用Go語言寫的桌面編輯器程序,被看做是著名編輯器Sublime Text的開源實現(xiàn)。
六:revel 【Star:10508】
Revel是一個高生產(chǎn)力的Go語言Web框架。Revel框架支持熱編譯,當編輯、保存和刷新源碼時,Revel會自動編譯代碼和模板;全棧特性,支持路由、參數(shù)解析、緩存、測試、國際化等功能。
1.先安裝Go對應的開源Swagger相關的庫
go get?github.com/swaggo/swag/cmd/swag
go get github.com/swaggo/gin-swagger
go get?github.com/swaggo/files
go get?github.com/alecthomas/template
2.驗證是否安裝成功:swag -v
3.針對接口寫入注解
// @Summary 獲取多個標簽
// @Tags 標簽
// @Produce? json
// @Param name query string false "標簽名稱" maxlength(100)
// @Param state query int false "狀態(tài)" Enums(0, 1) default(1)
// @Param page query int false "頁碼"
// @Param page_size query int false "每頁數(shù)量"
// @Success 200 {object} model.TagSwagger "成功"
// @Failure 400 {object} errcode.Error "請求錯誤"
// @Failure 500 {object} errcode.Error "內(nèi)部錯誤"
// @Router /api/v1/tags [get]
func (t Tag) List(c *gin.Context) {
}
// @Summary 新增標簽
// @Tags 標簽
// @Produce? json
// @Param name body string true "標簽名稱" minlength(3) maxlength(100)
// @Param state body int false "狀態(tài)" Enums(0, 1) default(1)
// @Param created_by body string false "創(chuàng)建者" minlength(3) maxlength(100)
// @Success 200 {object} model.Tag "成功"
// @Failure 400 {object} errcode.Error "請求錯誤"
// @Failure 500 {object} errcode.Error "內(nèi)部錯誤"
// @Router /api/v1/tags [post]
func (t Tag) Create(c *gin.Context) {
}
// @Summary 更新標簽
// @Tags 標簽
// @Produce? json
// @Param id path int true "標簽ID"
// @Param name body string false "標簽名稱" minlength(3) maxlength(100)
// @Param state body int false "狀態(tài) (0為未刪除、1為已刪除)" Enums(0, 1) default(1)
// @Param modified_by body string true "修改者" minlength(3) maxlength(100)
// @Success 200 {array} model.Tag "成功"
// @Failure 400 {object} errcode.Error "請求錯誤"
// @Failure 500 {object} errcode.Error "內(nèi)部錯誤"
// @Router /api/v1/tags/{id} [put]
func (t Tag) Update(c *gin.Context) {
}
4.針對整個項目進行注解,直接在main方法寫入如下注解
//@title 項目名稱
//@version 1.0
//@description 這里是描述
func main() {
5.生成執(zhí)行 swag init
這時會在我項目的docs文件夾下面生成docs.go、swagger.json、swagger.yaml三個文件
6.要在routers中進行默認初始化和注冊對應的路由:
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
同時要引用 _"blog-service/docs" ,不然會報錯
7.查看接口文檔 :
8.ok,完成
go語言web框架beego安裝(go mod方式)_不忘初心,方得始終-CSDN博客
重要:將bee命令放到GOROOT/bin目錄下,這步很關鍵
cp bee /usr/local/go/bin/
注:或者可以將GOPATH/bin設置為環(huán)境變量
echo ’export PATH=" PATH"' ~/.bashrc
source ~/.bashrc
router路由下方法名要大寫,訪問權(quán)限
wq保存
生效環(huán)境變量: source /etc/profile
go build -o abc.exe可指定編譯后的文件名
Golang常用環(huán)境變量說明與設置詳解
環(huán)境變量GOBIN表示我們開發(fā)程序編譯后二進制命令的安裝目錄。
當我們使用go install命令編譯和打包應用程序時,該命令會將編譯后二進制程序打包GOBIN目錄,一般我們將GOBIN設置為GOPATH/bin目錄。
export GOBIN=$GOPATH/bin
Go get包管理mod
windows下默認項目路徑在go安裝目錄的src下(beego)
k6是新興的性能測試框架,比肩jmeter,另外測試腳本使用js,更加適合自動化的架構(gòu)。
k6啟動的框架是使用golang的cli標準框架cobra,入口函數(shù)
進入cobra框架后,我們直接查看getRunCmd,這個是命令run的入口,主要工作都是從這里開始。
重點關注初始化Runner,這個是通過js腳本,使用goja庫解析后,生成的實際執(zhí)行單元。
進入js目錄,查看Runner的結(jié)構(gòu),runner.go
Runner有一些配置屬性,另外還有方法,方法用lib.Runner的接口進行規(guī)范。
Runner有一個NewVU方法,里面定義了連接參數(shù),實現(xiàn)api測試
返回主函數(shù),在初始化完成Runner后,啟動調(diào)度器,以及做結(jié)果收集
最終封裝成一個engine
啟動測試
新聞名稱:go語言代碼生成框架,go語言源碼
標題URL:http://chinadenli.net/article29/dsgjojh.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、品牌網(wǎng)站制作、App設計、ChatGPT、云服務器、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)