What is not so clear is if after the client call stub.message the server only 'reply' to that using the stream response and nothing else, is it correct? Sever can not start a new exchanges of request/response to the client, right? What we would like to do is: -client invoke the rpc (there is no other way I understood) -server ask something to the client -client do something somewhere else and return result to the server Is it doable?
Thanks Sorry for brevity and typos Sent from iPhone Il giorno 29 lug 2016, alle ore 18:31, Nathaniel Manista <[email protected]<mailto:[email protected]>> ha scritto: On Fri, Jul 29, 2016 at 5:24 AM, Mosca, Federico <[email protected]<mailto:[email protected]>> wrote: Hi, so do you suggest to do this: client.py import grpc import generated.bidirectional_pb2 as bid def run(): channel = grpc.insecure_channel('localhost:50051') stub = bid.SpeakStub(channel) Constructing a channel and a stub aren't enough to exchange messages; you must also invoke an RPC. From your .proto like the way to do that will be to add "my_response_iterator = stub.Message(<your iterator of request messages>)" to this client-side code (and then additional code doing whatever it is that you want to do with the responses that you receive). If you don't need to ever send any request messages, something like "iter(())" would be fine for <your iterator of request messages>. if __name__ == '__main__': run() server.py def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) bid.add_SpeakServicer_to_server(bid.SpeakServicer(),server) server.add_insecure_port('[::]:50051') server.start() print "[SERVER] start at 50051" try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: server.stop(0) if __name__ == '__main__': serve() but I don't get where I should implement the servicer SpeakServicer(bid.BetaSpeakServicer) and how to invoke it for be that the server send the message to the client. bidirectional_pb2.SpeakServicer is a do-nothing class that has an implementation of the Message method that raises NotImplementedError (right?). What we intend is for you to subclass bidirectional_pb2.SpeakServicer and override its implementation of the Message method with an implementation that does whatever you wish it to do. Then rather than instantiating bidirectional_pb2.SpeakServicer and passing that object to add_SpeakServicer_to_server, pass an instance of your subclass to add_SpeakServicer_to_server. Where the proto file is service Speak { rpc Message(stream Request) returns (stream Response){} } Can you help me? I hope I have; please feel welcome to ask more! -Nathaniel -- 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 post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/2B94A9D0-17AC-4108-A85D-9F85CE5061A6%40here.com. For more options, visit https://groups.google.com/d/optout.
