0
点赞
收藏
分享

微信扫一扫

【小沐学Python】Python实现通信协议(grpc简介)

1、简介

https://grpc.io/docs/what-is-grpc/introduction/ https://github.com/grpc/grpc

gRPC 是一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架。gRPC 使客户端和服务器应用程序能够 透明地进行通信,并简化互联系统的构建。

在这里插入图片描述

gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言。 在这里插入图片描述

在 gRPC 中,客户端应用程序可以直接调用服务器应用程序上的方法 在另一台机器上,就好像它是本地对象一样,使你更容易 创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 是 基于定义服务的思想,指定可以 使用其参数和返回类型进行远程调用。在服务器端, server 实现此接口并运行 gRPC 服务器来处理客户端调用。 在客户端,客户端有一个存根(在某些客户端中称为客户端 languages),它提供与服务器相同的方法。 在这里插入图片描述

一个gRPC服务的大体结构图为: 在这里插入图片描述

image.png

image.png

2、安装

pip install grpcio
pip install grpcio-tools  
pip install protobuf

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

使用 gRPC 首先需要做的是设计 protocol buffer。新建一个 msg.proto 文件。

syntax = "proto3";
 
service MsgService {
 rpc GetMsg (MsgRequest) returns (MsgResponse){}
}
 
message MsgRequest {
  string name = 1;
}
 
message MsgResponse {
  string msg = 1;
}

msg_server.py:

import grpc
import msg_pb2
import msg_pb2_grpc
 
from concurrent import futures
import time
 
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
 
 
class MsgServicer(msg_pb2_grpc.MsgServiceServicer):
 
  def GetMsg(self, request, context):
    print("Received name: %s" % request.name)
    return msg_pb2.MsgResponse(msg='Hello, %s!' % request.name)
 
 
def serve():
  server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
  msg_pb2_grpc.add_MsgServiceServicer_to_server(MsgServicer(), server)
  server.add_insecure_port('[::]:50051')
  server.start()
  try:
    while True:
      time.sleep(_ONE_DAY_IN_SECONDS)
  except KeyboardInterrupt:
    server.stop(0)
 
if __name__ == '__main__':
  serve()

msg_client.py:

import grpc
 
import msg_pb2
import msg_pb2_grpc
 
def run():
  # NOTE(gRPC Python Team): .close() is possible on a channel and should be
  # used in circumstances in which the with statement does not fit the needs
  # of the code.
  with grpc.insecure_channel('localhost:50051') as channel:
    stub = msg_pb2_grpc.MsgServiceStub(channel)
    response = stub.GetMsg(msg_pb2.MsgRequest(name='world'))
  print("Client received: " + response.msg)
 
 
if __name__ == '__main__':
  run()

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡) 感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

举报

相关推荐

0 条评论