1. 程式人生 > >GoLang Web應用三 gRPC介紹與安裝

GoLang Web應用三 gRPC介紹與安裝

gRPC介紹與安裝

A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. ——gRPC Website

gRPC 是一個高效能、開源、通用的RPC框架,由Google推出,基於HTTP/2協議標準設計開發,預設採用Protocol Buffers資料序列化協議,支援多種開發語言。gRPC提供了一種簡單的方法來精確的定義服務,並且為客戶端和服務端自動生成可靠的功能庫。

主要特性

  • 強大的IDL
    gRPC使用ProtoBuf來定義服務,ProtoBuf是由Google開發的一種資料序列化協議(類似於XML、JSON、hessian)。ProtoBuf能夠將資料進行序列化,並廣泛應用在資料儲存、通訊協議等方面。

  • 多語言支援
    gRPC支援多種語言,並能夠基於語言自動生成客戶端和服務端功能庫。目前已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它語言的版本正在積極開發中,其中,grpc支援C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等語言,grpc-java已經支援Android開發。

  • HTTP/2
    gRPC基於HTTP/2標準設計,所以相對於其他RPC框架,gRPC帶來了更多強大功能,如雙向流、頭部壓縮、多複用請求等。這些功能給移動裝置帶來重大益處,如節省頻寬、降低TCP連結次數、節省CPU使用和延長電池壽命等。同時,gRPC還能夠提高了雲端服務和Web應用的效能。gRPC既能夠在客戶端應用,也能夠在伺服器端應用,從而以透明的方式實現客戶端和伺服器端的通訊和簡化通訊系統的構建。

在gRPC客戶端可以直接呼叫不同伺服器上的遠端程式,使用姿勢看起來就像呼叫本地程式一樣,很容易去構建分散式應用和服務。和很多RPC系統一樣,服務端負責實現定義好的介面並處理客戶端的請求,客戶端根據介面描述直接呼叫需要的服務。客戶端和服務端可以分別使用gRPC支援的不同語言實現。

圖片描述

grpc庫與protobuf

預設需要單獨編譯安裝grpc與protobuf編譯器,grpc/homebrew-grpc專案提供了快速安裝指令碼,可以直接安裝grpc、protobuf編譯器及其它語言編譯需要的外掛。go語言外掛需要獨立安裝。

準備工作

安裝

指令碼安裝

curl -fsSL https://goo.gl/getgrpc |
 bash -s -- --with-plugins

或者直接使用brew安裝:

brew tap grpc/grpc
brew install --with-plugins grpc

安裝結果:

/usr/local/bin

protoc
grpc_cpp_plugin
grpc_node_plugin
grpc_python_plugin
grpc_csharp_plugin
grpc_objective_c_plugin
grpc_ruby_plugin

這種安裝方式會安裝gRPc C/C++庫和其它支援語言的proto外掛和protobuf編譯器。如果用不到這些語言,可以只安裝protobuf就好了,參考專案:protobuf。java和go支援有獨立專案grpc-javagrpc-go

Golang protobuf外掛

安裝:

  • 要求golang版本 > 1.4

  • 使用前要求安裝protocol buffer編譯器

執行:

go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

編譯後會安裝protoc-gen-go$GOBIN目錄, 預設在 $GOPATH/bin. 該目錄必須在系統的環境變數$PATH中,這樣在編譯.proto檔案時protocol編譯器才能找到外掛。

grpc-go

# 如果需要翻牆自己解決吧
go get -u google.golang.org/grpc(需要翻牆)此處也可以在github.com映象下載,1)$go get -u github.com/grpc/grpc-go2)(還原目錄)將src/github.com/grpc/grpc-go資料夾複製到src/google.golang.org目錄下,如果沒有此資料夾則新建一個3)將grpc-go資料夾重新命名為grpc,至此grpc安裝完成同理:golang.org/x/tools、net、sys、text、time、tools也可以這樣下載,在github.com目錄為:github.com/golang/目錄下

編譯器使用

使用protoc命令編譯.proto檔案,不同語言支援需要指定輸出引數,如:

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --javanano_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file.proto

這裡詳細介紹golang的編譯姿勢:

  • -I 引數:指定import路徑,可以指定多個-I引數,編譯時按順序查詢,不指定時預設查詢當前目錄

  • --go_out :golang編譯支援,支援以下引數

    • plugins=plugin1+plugin2 - 指定外掛,目前只支援grpc,即:plugins=grpc

    • M 引數 - 指定匯入的.proto檔案路徑編譯後對應的golang包名(不指定本引數預設就是.proto檔案中import語句的路徑)

    • import_prefix=xxx - 為所有import路徑新增字首,主要用於編譯子目錄內的多個proto檔案,這個引數按理說很有用,尤其適用替代一些情況時的M引數,但是實際使用時有個蛋疼的問題導致並不能達到我們預想的效果,自己嘗試看看吧

    • import_path=foo/bar - 用於指定未宣告packagego_package的檔案的包名,最右面的斜線前的字元會被忽略

    • 末尾 :編譯檔案路徑 .proto檔案路徑(支援萬用字元)

完整示例:

protoc -I . --go_out=plugins=grpc,Mfoo/bar.proto=bar,import_prefix=foo/,import_path=foo/bar:. ./*.proto

相關推薦

GoLang Web應用 gRPC介紹安裝

gRPC介紹與安裝A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. ——gRPC WebsitegRPC 是一個高效能、開源、通用的RPC框架,由

在Linux安裝配置Tomcat 並部署web應用 ( 種方式 )

系統版本:centos6.5版本 java版本:1.7 一、準備工作 1、java -version 檢查是否有java環境,沒有則需要去安裝並配置到環境變數中。 可以本地下載後上傳到伺服器上,也可以直接在伺服器上使用wget命令

ZooKeeper系列之二:Zookeeper應用介紹安裝部署大神必學

定性 前言 默認 即使 日誌 名稱 hosts too 臺電 前言最近有很多粉絲反映怎麽學好java?Zookeepr是什麽? java開發技術不是一兩天就能學好的,Zookeepr也是一樣的道理,關鍵還得看你怎麽去學,跟誰去學,俗話說的好師傅領進門,修行靠個人,這個不是短

MySQL數據庫(1)_MySQL數據庫介紹安裝

structure 文件 nbsp code 字符串常量 blank 擴展性 比較 模式 一、數據庫相關概念的簡介   數據庫(database,DB)是指長期存儲在計算機內的,有組織,可共享的數據的集合。數據庫中的數據按一定的數學模型組織、描述和存儲,具有較小的冗余,較高

2017.8.5 VMware的介紹安裝

eight 序列號 成功 -128 而是 漢化 容易 自啟 局域網 1 VMware簡介 官網地址:http://www.vmware.com VMware的功能: 是一個虛擬PC的軟件,可以在現有的操作系統上虛擬出一個新的硬件環境,相當於模擬出一臺新的PC,以此來實

Gtk+/Gtkmm介紹安裝(有繼承關系圖)

sig img 程序 問題 bject 發出 scu times 它的 GTK+是一套跨平臺的,以C語言編寫的GUI類庫,它起源於GNU的圖像處理程序"GIMP",因而被起名為"The GIMP Toolkit",從一開始它就被設計為支持多種語言,而不僅僅是C。 雖然

初識keepalived(一)——keepalived介紹安裝

keepalivedkeepalived介紹keepalived作為高可用集群的一種實現方式,相對於proxy和heartbeat輕量得多,而集群根據實現的功能不同可以分為3種:1.HA(high available)集群:由一組對外提供相同服務的設備組成,組內每一臺設備故障不會影響到服務的正常提供。2.LB

Python第一天:編程的概念、python的介紹安裝、python的變量、python的運算符

代碼 .com 循環輸出 html targe .cn 次循環 概念 9.png 一、內容 二、練習: 1、使用while循環輸出1、2、3、4、5、6、8、9、10 方法一:說明:當count 等於7時,count加1,此時count的值為8,然後continu

Photon介紹安裝

account conf 點擊 快速 ica 我的電腦 找到 當前 退出 Photon光子引擎是一款實時的Socket服務器和開發框架,快速、使用方便、容易擴展。 服務端架構在windows系統平臺上,采用C#語言編寫。 客戶端SDK提供了多種平臺的開發API,包括DotN

MySql介紹安裝

小型 好的 exe 用戶名 and mysql-in stand 靈活 服務 MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的

Redis介紹安裝

消息 字符串 源碼 通過 進行 sta 設置 mys bar 一、redis介紹 redis是一個key-value存儲系統。和Memcached類似,它支持存儲的values類型相對更多,包括字符串、列表、哈希散列表、集合,有序集合。 這些數據類型都支持push/pop

Nginx的介紹安裝、Nginx的默認虛擬主機

Linux學習筆記Nginx的介紹與安裝 Nginx的默認虛擬主機 Nginx的介紹與安裝、Nginx的默認虛擬主機

nginx介紹安裝

nginx nginx安裝 Nginx介紹 Nginx官網 nginx.org 一般使用穩定版stable version has been released.應用場景:web服務、反向代理、負載均衡 安裝nginx 下載與解壓 cd /usr/local/src/ wget http://nginx

Tomcat的介紹安裝、jdk的安裝

Tomcat jdk Tomcat介紹 Tomcat是Apache軟件基金會的Jakarta項目中的一個核心項目;Java程序寫的網站用Tomcat+jdk來運行;Tomcat是一個中間件,真正起作用的,解析Java的是jdk;jdk是整個Java的核心,他包含了Java的運行環境和一堆Java相關的

Zabbix 3.0入門到企業實戰二(zabbix介紹安裝)

分布 1.2 網絡狀態 需要 服務端 mysql 軟件 組織 lar Zabbix的簡介 1.1 什麽是zabbix? Zabbix是一個基於Web界面的分布式系統監控的企業級開源軟件。可以監視各種系統與設備的參數,保障服務器及設備的安全運營。Zabbix是一個

DNS介紹安裝使用

分享圖片 list 域名主機 ins named 失敗 批處理 rect ads DNS簡介 DNS是互聯網的一項服務。它作為將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便地訪問互聯網。DNS使用TCP和UDP的53號端口。 DNS服務的基本概念 在使用DNS前

Python介紹安裝

能夠 對象 去重 AR post 方案 郵件 style 操作系統 Python(英國發音:/?pa?θ?n/ 美國發音:/?pa?θɑ?n/), 是一種面向對象的解釋型計算機程序設計語言。它簡單易學、功能強大,支持面向對象、函數式編程。Python可以在Windows

CDH5.14.2 的Navigator介紹安裝

大數據 cdh Navigator CDH5.14.2 的Navigator介紹與安裝

DRBD的介紹安裝

linu out 相同 暫停 等待 link tab oba F5 一、DRBD介紹 介紹部分來自:http://www.ywnds.com/?p=6619 1 DRBD基本功能 Distributed Replicated Block Device(DRBD)是一種基於軟

Web應用種部署方式的優缺點

網站 span text pat docbase 自動部署 後臺 文件的 人性化 方式一:修改server.xml文件 優點: 配置速度快,只需要在server.xml文件中添加<Context>標簽,在其中分別配置path虛擬路徑和docBase真實路徑然