首页 > 解决方案 > gRPC 会话:生命周期和持久性

问题描述

我已经实现了一个 gRPC 服务器来将客户端进程的任务委托给这个服务器。

考虑到多个客户端,我想知道 Servicer-Class 是暂时的还是永久的。

我推导出服务者如下:

class MyServicer(my_pb2_grpc.MyServicer):

    def __init__(self):
        self.attrA = 0
        self.attrB = 0
        self.attrC = 0

    def rpcMethodA(self, request, context):
        self.attrA += 1
    def rpcMethodB(self, request, context):
        ...

服务器开始像

server = grpc.server(futures.ThreadPoolExecutor())
my_pb2_grpc.add_MyServicer_to_server(MyServicer(), server)
server.add_insecure_port('[::]:50000')
server.start()

如图所示,MyServicer每个实例都有属性。那个对象被维护了吗?attrA对于由一个特定客户端调用的服务程序类的一个实例是否会增加?每个客户端会绑定多个实例吗?该实例将存在多长时间?它是否在每次新呼叫时重新创建?

标签: networkingprotocol-buffersgrpcrpcgrpc-python

解决方案


通过测试行为,gRPC Servicer 暴露了这种行为:

会话:没有会话管理。

服务者生命周期:服务者实例持续到服务器终止。

派生服务用于连接到服务器的每个客户端。attrA只要服务器运行,该属性就会递增。


推荐阅读