首页 > 编程语言 >python gRPC简单使用

python gRPC简单使用

时间:2023-02-08 11:22:46浏览次数:75  
标签:pb2 python server gRPC 简单 -- ticket grpc

安装

pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple -- 安装gRPC

pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple --安装ProtoBuf 相关的 python 依赖库

pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple --安装python grpc 的 protobuf 编译工具

生成

python -m grpc_tools.protoc -I ./protos --python_out=. --pyi_out=. --grpc_python_out=. ./protos/ticket.proto

--python_out --pyi_out --grpc_python_out 对应生成的ticket_pb2.py ticket_pb2.pyi ticket_pb2.pyi三个文件对应路径

服务端

简单创建一个服务端,证书生成参考基与python的GRPC SSL/TLS加密及Token鉴权 - Nolinked - 博客园 (cnblogs.com)
import grpc
from concurrent import futures

import logging
import ticket_pb2,ticket_pb2_grpc

class Ticket(ticket_pb2_grpc.TicketServicer):
	# 重写原先proto文件方法
    def QueryTicket(self, request, context):
        return ticket_pb2.QueryReply(num=100)

def serve():
    with open('server.key','rb') as f:
        private_key = f.read()
    with open('server.crt','rb') as f:
        certificate_chain = f.read()

    server_credentials = grpc.ssl_server_credentials(
      ((private_key, certificate_chain,),))

    port = '50051'
    # 启用ssl
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    ticket_pb2_grpc.add_TicketServicer_to_server(Ticket(), server)
    server.add_secure_port('[::]:' + port,server_credentials)
    server.start()
    print("Server started, listening on " + port)
    server.wait_for_termination()


if __name__ == '__main__':
    logging.basicConfig()
    serve()

客户端

创建一个客户端于服务端通信
import grpc
import ticket_pb2,ticket_pb2_grpc
from src.google.protobuf.struct_pb2 import Struct

_HOST = 'localhost'
_PORT = '50051'

def run():
    with open('server.crt', 'rb') as f:
        trusted_certs = f.read()
    credentials = grpc.ssl_channel_credentials(root_certificates=trusted_certs)
     
    options = (('grpc.ssl_target_name_override','WLYNC',),)

    with grpc.secure_channel((_HOST+':'+_PORT), credentials, options = options) as channel:
        stub = ticket_pb2_grpc.TicketStub(channel)
        response:ticket_pb2.QueryReply = stub.QueryTicket(ticket_pb2.QueryRequest(id="1"))
    print(f"票数: {response.num}")


if __name__ == '__main__':
    run()


运行效果

启动服务端

启动客户端

标签:pb2,python,server,gRPC,简单,--,ticket,grpc
From: https://www.cnblogs.com/DarkRoger/p/17101082.html

相关文章

  • python 创建新项目流程
    1,更新包管理工具并安装Django环境(用于创建Django项目)。pip3install-Upippip3installdjango==2.2.132检查Django环境并使用`django-admin`命令创建Django项目(项目......
  • python背单词小程序
    英语差就闲来无事用python写一个背单词的小程序,英语不好的博友们可以参考参考,哈哈~~~哈哈哈哈哈程序代码:importrandomast#创建单词序列words=("easy","difficult","answe......
  • 学习Python包含哪些基础内容
    对于刚刚入行的新手来说,如何打好Python基础非常重要。首先我们要了解Python语言起源、设计目标、设计哲学,Python语言的优缺点和面向对象的基本概念、执行方式、集成开发环......
  • C语言填空:简单计算器
    /*编写一个简单的计算器程序,输入格式为:data1opdata2是参加运算的两个数,op为运算符,它的取值只能是+、-、*/#include<stdio.h>main(){intdata1,data2;cha......
  • 第10课、python 函数、类和方法
      -----------------一、数学相关1、绝对值:abs(-1)2、最大最小值:max([1,2,3])、min([1,2,3])3、序列长度:len('abc')、len([1,2,3])、len((1,2,3))4、取模:divmod(5,2......
  • 第 1,2 课、环境搭建-Python+Selenium+pycharm
                          ......
  • python 的多线程
    创建一个多线程fromthreadingimportThread,ThreadErrorimporttimedeftask_01():print("开始发送邮件")time.sleep(1)print("邮件发送成功")i......
  • python安装学术版cplex解析器
    python3.7安装学术版cplex解析器下载地址https://pan.baidu.com/s/1tNpbzAU0fLi29MMX3EbwPQ?pwd=wt12提取码:wt12 关于windows的.exe1.直接点击执行即可关于linux......
  • linux下安装python3.7
    linux下安装python3.71.安装依赖包,如果不安装将导致编译失败,或者功能缺失yum-yinstallopenssl-develzlib-develgcc2.在local目录下创建python3目录,供放置最终......
  • 环境变量设置和简单的DOS命令(window)
    环境变量:相当于快捷方式,只不过快捷方式是在桌面,而设置环境变量后可在命令提示符中进行操作。1,首先,由于我们设置的是用户环境变量,需要把系统环境变量中的path复制到用户变......