# tools 包含**生成工具,會自動安裝依賴的 grpcio 包
pip install grpcio_tools
編寫協議檔案pi.proto
syntax = "proto3";
package pi;
// pi service
service picalculator
}// pi input
message pirequest
// pi output
message piresponse
python -m grpc_tools.protoc -i. --python_out=. --grpc_python_out=. pi.proto
server端**
# -*- coding:utf-8 -*-
# server.py
import math
import grpc
import time
from concurrent import futures
import pi_pb2, pi_pb2_grpc
# 圓周率計算服務實現類
class
picalculatorservicer
(pi_pb2_grpc.picalculatorservicer)
:def
calc
(self, request, context)
:# 計算圓周率的邏輯在這裡
s =0.0for i in
range
(request.n)
: s +=
1.0/(2
* i +1)
/(2* i +1)
# 注意返回的是乙個響應物件
return pi_pb2.piresponse(value=math.sqrt(
8* s)
)def
main()
:# 多執行緒伺服器
server = grpc.server(futures.threadpoolexecutor(max_workers=10)
)# 例項化圓周率伺服器類
pi_server = picalculatorservicer(
)# 註冊本地服務
pi_pb2_grpc.add_picalculatorservicer_to_server(pi_server, server)
# 監聽埠
server.add_insecure_port(
"127.0.0.1:8080"
)# 開始接收請求進行服務
server.start(
)# 使用ctrl+c可以退出服務
try:
time.sleep(
1000
)except keyboardinterrupt:
server.stop(0)
if __name__ ==
'__main__'
: main(
)
client端**
# -*- coding:utf-8 -*-
# client.py
import grpc
import pi_pb2
import pi_pb2_grpc
defmain()
: channel = grpc.insecure_channel(
'localhost:8080'
)# 使用 stub
client = pi_pb2_grpc.picalculatorstub(channel)
# 呼叫吧
for i in
range(1
,1000):
print
(client.calc(pi_pb2.pirequest(n=i)
).value)
if __name__ ==
'__main__'
: main(
)
go版本gRPC入門
本文通過乙個簡單的示例,了解如何在go中使用grpc。使用命令列安裝 使用以下命令安裝grpc go get google.golang.org grpc 獲取編譯器外掛程式protoc gen go,並將其安裝在 gobin路徑中,預設為 gopath bin。5 必須設定好 path環境變數,協...
如何用Python搭建gRPC服務
目錄 乙個grpc服務的大體結構圖為 圖一表明,grpc的服務是跨語言的,但需要遵循相同的協議 proto 相比於rest服務,gprc 的乙個很明顯的優勢是它使用了二進位制編碼,所以它比 json http 更快,且有清晰的介面規範以及支援流式傳輸,但它的實現相比rest服務要稍微要複雜一些,下面...
gRPC 如何確認TLS版本
因客戶需求grpc必須支援ssl tls1.2以上的版本,之前納悶沒有檢視支援tls版本的選項和巨集開關,後續想到可以通過抓包工具獲取協議頭的資訊。但是我實際通過wireshark模擬抓包資料確不是tlsv1.2,而是tlsv1。後續排查發現,有可能是openssl版本的問題。加密組同事提供的版本是...