Связь между двумя хостами с помощью grpc на python

#python #grpc

#python #grpc

Вопрос:

Я написал простой скрипт на python с использованием grpc, позволяющий взаимодействовать двум процессам на localhost. Теперь я хочу объединить два процесса, запущенных на двух разных компьютерах.

Я пытался изменить порт и IP-адрес сервера, но не работает.

Это мой клиент :

  def run():
    if len(sys.argv) < 2:
      print("Usage : python controller_agent.py <server-ip-address>")
      exit(0)
    with grpc.insecure_channel('%s:50051' % sys.argv[1]) as channel:
      stub = controller_agent_pb2_grpc.AgentServiceStub(channel)
      message_in = input('Message : ')
      response = stub.EchoMessage(controller_agent_pb2.EchoRequest(message=message_in))
    print(response.message)
  

И это мой сервер :

 _ONE_DAY_IN_SECONDS = 60 * 60 * 24


class RouterAgent(controller_agent_pb2_grpc.AgentServiceServicer):

    def EchoMessage(self, request, context):
        print("Echo : %s" %request.message)
        return controller_agent_pb2.EchoReply(message="Echo : %s" % request.message)


def serve():
    server = grpc.server(ThreadPoolExecutor(max_workers=10))
    controller_agent_pb2_grpc.add_AgentServiceServicer_to_server(RouterAgent(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)
  

Как я могу изменить код, чтобы скрипт работал не только на localhost?

Это сообщение об ошибке при попытке связи с удаленным хостом

Комментарии:

1. Доступно ли у вас сообщение об ошибке или журнал трассировки? Есть ли на компьютере, на котором запущен ваш сервер, порт, который должен быть открыт gRPC?

2. я добавил сообщение об ошибке.

3. Похоже, проблема с брандмауэром. Я бы убедился, что порт 50051 открыт для входящих TCP-соединений на стороне сервера.

4. Можете ли вы убедиться, что имя хоста, к которому вы подключаетесь, разрешимо? Возможно, с использованием таких инструментов, как nslookup или dig.