Hello everyone.

I was trying to see if it's possible to run different instances of the same 
service on a single GRPC server, but it looks like I'm not able to do so. 
So I was wondering if I was doing anything wrong with my test, or if it's 
not possible at all. 

My test is based on examples/python/multiplex 
<https://github.com/grpc/grpc/tree/master/examples/python/multiplex> from 
grpc repo:

Service:


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))


Server:

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()


Client:

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)


Since I'm opening a new channel for each iteration, I was expecting to get 
an output with a mix of "Hello, you! This is Jim!" and "Hello, you! This is 
John!", but instead I'm getting only:


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!


that is, the first service of GreeterServicer I added to the server, which 
supposedly ignore the second servicer instance.


So, my question is if it's even possible to do something like this on a 
single server and if there is a best practice to handle such scenarios 
where I would want two mostly identical services, parameterized 
differently: different servers load balanced (thus, following 
https://grpc.io/blog/grpc-load-balancing best practices)? Multiple threads 
implemented by me within the service?

In my particular scenario, the parameters I'd like to pass are some 
credentials to be used within the service implementation, and my goal would 
be, then, to have these multiple identical services running concurrently, 
with different credentials, so that the end user has no idea there are 
multiple instances, when making requests.


Thank you very much,

Federico

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/92920457-af7e-485b-a1a8-45ff6afeaa94%40googlegroups.com.

Reply via email to