亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

python golang中g(shù)rpc 使用示例代碼詳解

瀏覽:3日期:2022-07-23 11:41:04

python

1、使用前準備,安裝這三個庫

pip install grpciopip install protobufpip install grpcio_tools

2、建立一個proto文件hello.proto

// [python quickstart](https://grpc.io/docs/quickstart/python.html#run-a-grpc-application)// python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto// helloworld.protosyntax = 'proto3';package test;service Greeter { rpc SayHello(HelloRequest) returns (HelloReply) {} rpc SayHelloAgain(HelloRequest) returns (HelloReply) {}}service Greetera{ rpc SayStudent(Studentid) returns (Student){}}message Student { string msg=1;//json}message Studentid{ string id=1;}message HelloRequest { string name = 1;}message HelloReply { string message = 1;}

3、執(zhí)行命令就會對應(yīng)生成兩個py文件

hello_pb2.py

hello_pb2_grpc.py

python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto

4、py服務(wù)端代碼hello.server.py:

from concurrent import futuresimport timeimport grpcimport hello_pb2import hello_pb2_grpcimport json# 實現(xiàn) proto 文件中定義的 GreeterServicerclass Greeter(hello_pb2_grpc.GreeterServicer): # 實現(xiàn) proto 文件中定義的 rpc 調(diào)用 def SayHello(self, request, context): return hello_pb2.HelloReply(message = ’hello {msg}’.format(msg = request.name)) def SayHelloAgain(self, request, context): return hello_pb2.HelloReply(message=’hello {msg}’.format(msg = request.name))class Gretera(hello_pb2_grpc.GreeteraServicer): def SayStudent(self,request,context): print(request.id) if request.id=='0': c=hello_pb2.Student(msg=json.dumps({'name':'owen','age':22,'sex':'男'})) else: c=hello_pb2.Student(msg=json.dumps({'name':'lihui','age':23,'sex':'女'})) return cdef serve(): # 啟動 rpc 服務(wù) server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) hello_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) hello_pb2_grpc.add_GreeteraServicer_to_server(Gretera(),server) server.add_insecure_port(’[::]:50052’) server.start() try: while True: time.sleep(60*60*24) # one day in seconds except KeyboardInterrupt: server.stop(0)if __name__ == ’__main__’: serve()

py客戶端代碼hello.client.py:

import grpcimport hello_pb2import hello_pb2_grpcimport jsondef run(): # 連接 rpc 服務(wù)器 channel = grpc.insecure_channel(’localhost:50051’) # 調(diào)用 rpc 服務(wù) stub = hello_pb2_grpc.GreeterStub(channel) response = stub.SayHello(hello_pb2.HelloRequest(name=’czl’)) print('Greeter client received: ' + response.message) response = stub.SayHelloAgain(hello_pb2.HelloRequest(name=’nsdnfkjda’)) print('Greeter client received: ' + response.message) stub1 = hello_pb2_grpc.GreeteraStub(channel) response1 = stub1.SayStudent(hello_pb2.Studentid(id=’1’)) print(json.loads(response1.msg))if __name__ == ’__main__’: run()

golang

由于grpc是跨語言的所以這里用golang做為示范,golang客戶端代碼,小編這里也踩了許多坑,最主要的是兩個proto文件一定要一致,golang 中使用必須安裝protoc,windows將環(huán)境變量指向安裝目錄的bin下面:

1、protocal buffer安裝

從 https://github.com/google/protobuf/releases 下載 對應(yīng)自己的系統(tǒng)(環(huán)境變量記得改)

2、安裝 golang protobuf

go get -u github.com/golang/protobuf/proto // golang protobuf 庫go get -u github.com/golang/protobuf/protoc-gen-go //protoc --go_out 工具

3、安裝 gRPC-go

go get google.golang.org/grpc

4、生成go文件

protoc --go_out=plugins=grpc:文件目錄 對應(yīng)的.proto文件protoc --go_out=plugins=grpc:. hello.proto

生成hello.pb.go,調(diào)用的實現(xiàn)hello_go_client.go:

package mainimport ( 'context' 'encoding/json' 'google.golang.org/grpc' 'log' 'student/test' //對應(yīng)的生成文件目錄)type Studenmsg struct { Name string Age int Sex string}func main() { // 建立連接到gRPC服務(wù) conn, err := grpc.Dial('127.0.0.1:50052', grpc.WithInsecure()) if err != nil { log.Fatalf('did not connect: %v', err) } // 函數(shù)結(jié)束時關(guān)閉連接 defer conn.Close() // 創(chuàng)建Waiter服務(wù)的客戶端 t := test.NewGreeteraClient(conn) tr,err:=t.SayStudent(context.Background(),&test.Studentid{Id:'1'}) if err != nil { log.Fatalf('could not greet: %v', err) } var st Studenmsg err=json.Unmarshal([]byte(tr.Msg),&st)//這里說明一下發(fā)過來的數(shù)據(jù)是json格式轉(zhuǎn)化成struct if err!=nil{ log.Println(err.Error()) } log.Println(st.Name,st.Age,st.Sex)}

總結(jié)

到此這篇關(guān)于python golang中g(shù)rpc 使用示例代碼詳解的文章就介紹到這了,更多相關(guān)python golang grpc 使用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产成人一区二区视频在线观看 | 看日本真人一一级特黄毛片 | 精品国产免费久久久久久 | 日本一区二区三区在线 视频观看免费 | 精品72久久久久久久中文字幕 | 日本尹人综合香蕉在线观看 | 久久91在线 | 久草在线视频资源站 | 一级国产 | 三级黄色在线 | 九草在线免费观看 | 波多野结衣3女同在线观看 波多野结衣aⅴ在线 | 亚洲一区二区三区精品国产 | 亚洲第一视频在线观看 | 欧美成网 | 国产午夜精品理论片在线 | 超薄肉色丝袜精品足j福利 超级乱淫视频aⅴ播放视频 | 中文字幕播放 | 亚洲免费播放 | 国产美女动态免费视频 | 成人综合婷婷国产精品久久免费 | 手机在线看福利 | 日韩一区二区三区在线免费观看 | 男人的天堂在线免费视频 | 99ri在线精品视频在线播放 | 国产97在线视频 | 毛片手机在线观看 | 成人毛片在线观看 | 伊人狼人影院 | 国产在线a| 一级毛片免费观看不卡视频 | 美女视频黄a视频免费全过程 | 国产农村乱子伦精品视频 | 国产性做久久久久久 | 久久精品免视看国产明星 | 亚洲国产精 | 午夜久久久久久久 | www亚洲成人| 色综合夜夜嗨亚洲一二区 | 福利社在线 | 婷婷国产成人久久精品激情 |