拆分服务 gRPC python

Split up servicer gRPC python

构建我的第一个 gRPC 服务器应用程序。我不知道这是否是一个常见问题,但我的 rpc 服务程序变得相当大。

对于服务程序,我的意思是从生成的 xxx_pb2_grpc.xxxServicer 继承的 class(至少在 python 中)。

目前它有 19 个 RPC 调用。因此,实现这些调用的 class 变得相当大。考虑到一些 RPC 调用用于音乐播放,一些用于数据管理,一些用于与下载器通信(可能还会有更多),是否有任何方法可以将 Servicer 分成逻辑段。

我可以在 proto 文件中创建多个 service 类型,但是 xxx_pb2_grpc.add_xxxServicer_to_server 只接受一个服务商!

提前致谢。

编辑:18 年 2 月 3 日

我已将服务拆分为以下庄园:

service MusicPlayback {
    ... # rpc calls
}

service DataManager {
    ... # rpc calls
}

service MediaDownloader {
    ... # rpc calls
}

然后使用生成的 python 代码,我将服务器设置如下:

# Setup gRPC Server
self._gserver = grpc.server(futures.ThreadPoolExecutor(max_workers=self._connection_count))
rpc.add_MusicPlaybackServicer_to_server(self._mplayer, self._gserver)
rpc.add_DataManagerServicer_to_server(self._data_manager, self._gserver)
rpc.add_MediaDownloaderServicer_to_server(self._media_downloader, self._gserver)
self._gserver.add_insecure_port('[::]:' + str(self._port))

确实xxx_pb2_grpc.add_xxxServicer_to_server只接受一个服务商。但是您可以创建单个服务器,将其传递给 xxx_pb2_grpc.add_xxxServicer_to_server,然后再将它(同一服务器)传递给 xxx_pb2_grpc.add_xxxxxxxxxxxxxServicer_to_serveryyy_pb2_grpc.add_yyyServicer_to_serverzzz_pb2_grpc.add_zzzServicer_to_server。利用单个服务器可以服务任意多个服务(每个服务由一个服务程序实现)这一事实,应该可以防止服务增长到大量不相关的 RPC 方法。