拆分服务 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_server
、yyy_pb2_grpc.add_yyyServicer_to_server
和 zzz_pb2_grpc.add_zzzServicer_to_server
。利用单个服务器可以服务任意多个服务(每个服务由一个服务程序实现)这一事实,应该可以防止服务增长到大量不相关的 RPC 方法。
构建我的第一个 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_server
、yyy_pb2_grpc.add_yyyServicer_to_server
和 zzz_pb2_grpc.add_zzzServicer_to_server
。利用单个服务器可以服务任意多个服务(每个服务由一个服务程序实现)这一事实,应该可以防止服务增长到大量不相关的 RPC 方法。