欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年06月03日 09:01:40   作者:hw_owen ·  
這篇文章主要介紹了python golang中g(shù)rpc 使用,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

python

1、使用前準(zhǔn)備,安裝這三個(gè)庫

pip install grpcio
pip install protobuf
pip install grpcio_tools

2、建立一個(gè)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.proto
syntax = "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í)行命令就會(huì)對(duì)應(yīng)生成兩個(gè)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 futures
import time
import grpc
import hello_pb2
import hello_pb2_grpc
import json
# 實(shí)現(xiàn) proto 文件中定義的 GreeterServicer
class Greeter(hello_pb2_grpc.GreeterServicer):
 # 實(shí)現(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 c
def serve():
 # 啟動(dòng) 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 grpc
import hello_pb2
import hello_pb2_grpc
import json
def 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客戶端代碼,小編這里也踩了許多坑,最主要的是兩個(gè)proto文件一定要一致,golang 中使用必須安裝protoc,windows將環(huán)境變量指向安裝目錄的bin下面:

1、protocal buffer安裝

https://github.com/google/protobuf/releases  下載 對(duì)應(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:文件目錄 對(duì)應(yīng)的.proto文件
protoc --go_out=plugins=grpc:. hello.proto

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

package main
import (
 "context"
 "encoding/json"
 "google.golang.org/grpc"
 "log"
 "student/test" //對(duì)應(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é)束時(shí)關(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS 7 安裝python3.7.1的方法及注意事項(xiàng)

    CentOS 7 安裝python3.7.1的方法及注意事項(xiàng)

    這篇文章主要介紹了CentOS 7 安裝python3.7.1的方法,文中給大家提到了注意事項(xiàng),需要的朋友可以參考下
    2018-11-11
  • Python中self用法實(shí)例詳解

    Python中self用法實(shí)例詳解

    這篇文章主要介紹了Python中self用法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python從ZabbixAPI獲取信息及實(shí)現(xiàn)Zabbix-API 監(jiān)控的方法

    Python從ZabbixAPI獲取信息及實(shí)現(xiàn)Zabbix-API 監(jiān)控的方法

    這篇文章主要介紹了Python從ZabbixAPI獲取信息及實(shí)現(xiàn)Zabbix-API 監(jiān)控的方法,需要的朋友可以參考下
    2018-09-09
  • 一文了解Python?流程控制

    一文了解Python?流程控制

    這篇文章主要介紹了一文了解Python?流程控制,Python?中有while和for兩種循環(huán)機(jī)制,其中while循環(huán)是條件循環(huán),文章通過展開循環(huán)內(nèi)容展開控制流程詳情,需要的小伙伴可以參考一下
    2022-05-05
  • keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式

    keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式

    這篇文章主要介紹了keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Pycharm正版2022.2.2?官方翻譯插件更新tkk失敗不能用問題及解決方案

    Pycharm正版2022.2.2?官方翻譯插件更新tkk失敗不能用問題及解決方案

    這篇文章主要介紹了Pycharm正版2022.2.2?|?官方翻譯插件更新tkk失敗解決,?出現(xiàn)tkk問題的是這個(gè)翻譯插件,本教程只解決該翻譯插件不能用的問題,需要的朋友可以參考下
    2022-11-11
  • Python之os操作方法(詳解)

    Python之os操作方法(詳解)

    下面小編就為大家?guī)硪黄狿ython之os操作方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解Python爬蟲爬取博客園問題列表所有的問題

    詳解Python爬蟲爬取博客園問題列表所有的問題

    這篇文章主要介紹了詳解Python爬蟲爬取博客園問題列表所有的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 利用python下載scihub成文獻(xiàn)為PDF操作

    利用python下載scihub成文獻(xiàn)為PDF操作

    這篇文章主要介紹了利用python下載scihub成文獻(xiàn)為PDF操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 解決pycharm無法刪除invalid interpreter(無效解析器)的問題

    解決pycharm無法刪除invalid interpreter(無效解析器)的問題

    這篇文章主要介紹了pycharm無法刪除invalid interpreter(無效解析器)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論