Я пытался выяснить, возможно ли запускать разные экземпляры одной и той же службы на одном сервере GRP C, но похоже, что я не могу этого сделать. Поэтому мне было интересно, делал ли я что-то не так с моим тестом, или это вообще невозможно.
Мой тест основан на examples / python / multiplex из grp c repo :
Служба:
class _GreeterServicer(helloworld_pb2_grpc.GreeterServicer):
def __init__(self, greeter):
self.greeter = greeter
def SayHello(self, request, context):
return helloworld_pb2.HelloReply(
message='Hello, {}! This is {}!'.format(request.name, self.greeter))
Сервер:
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
helloworld_pb2_grpc.add_GreeterServicer_to_server(_GreeterServicer("John"),
server)
helloworld_pb2_grpc.add_GreeterServicer_to_server(_GreeterServicer("Jim"),
server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
Клиент:
def run():
for _ in range(10):
with grpc.insecure_channel('localhost:50051') as channel:
greeter_stub = helloworld_pb2_grpc.GreeterStub(channel)
greeter_response = greeter_stub.SayHello(
helloworld_pb2.HelloRequest(name='you'))
print("Greeter client received: " + greeter_response.message)
Поскольку я открываю новый канал для каждого итерации, я ожидал получить вывод со смесью "Привет, ты! Это Джим!" и «Здравствуйте, вы! Это Джон!», но вместо этого я получаю только:
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
Greeter client received: Hello, you! This is John!
, то есть первый сервис GreeterServicer, который я добавил на сервер, который предположительно игнорирует второй экземпляр сервисера .
Итак, у меня вопрос: возможно ли что-то подобное на одном сервере, и есть ли лучшая практика для обработки такого сценария ios, где я хотел бы, чтобы два в основном идентичных сервиса были параметризованы по-разному ( например, разные серверы grp c (это подразумевало бы распределение нагрузки между двумя экземплярами).
В моем конкретном сценарии передаваемые параметры - это некоторые учетные данные, которые будут использоваться в реализации службы, и моя цель в таком случае эти две идентичные службы будут работать одновременно, чтобы конечный пользователь не знал, что существует несколько экземпляров.