拆分服务程序 gRPC python

mel*_*tra 3 python protocol-buffers grpc

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

对于服务程序,我指的是从生成的类继承的类xxx_pb2_grpc.xxxServicer(至少在Python中)。

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

service我可以在原型文件中创建多种类型,但xxx_pb2_grpc.add_xxxServicer_to_server只接受一个服务程序!

提前致谢。

编辑:18 年 2 月 3 日

我将服务划分为以下庄园:

service MusicPlayback {
    ... # rpc calls
}

service DataManager {
    ... # rpc calls
}

service MediaDownloader {
    ... # rpc calls
}
Run Code Online (Sandbox Code Playgroud)

然后生成 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))
Run Code Online (Sandbox Code Playgroud)

小智 5

确实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 方法。