Подключение thrift-клиента будет успешным только после первого запуска этого клиента - PullRequest
0 голосов
/ 04 ноября 2018

Впервые после перезапуска моего Java-клиента, который может помочь, это может быть полезно. И тогда он показал время ожидания сокета. Бросок исключения:

org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out

Вот мой питон-сервер;

if __name__ == '__main__':
 handler = MessageServiceHandler()
    processor = MessageService.Processor(handler)
    transport = TSocket.TServerSocket(host="127.0.0.1", port=9090)
    tFactory = TTransport.TFramedTransportFactory()
    pFactory = TBinaryProtocol.TBinaryProtocolFactory()
    server = TServer.TSimpleServer(processor, transport, tFactory, pFactory)
    print("python thrift message service start")
    server.serve()
    print("python thrift message service exit")

Вот мой Java-клиент:

   public MessageService.Client getMessageService() {
        TSocket socket = new TSocket("localhost", 9090, 3000);
        TTransport transport = new TFramedTransport(socket);
        try {
            transport.open();
        } catch (TTransportException e) {
            e.printStackTrace();
        }
        TProtocol protocol = new TBinaryProtocol(transport);
        MessageService.Client client = new MessageService.Client(protocol); 
        return client;
    }

1 Ответ

0 голосов
/ 04 ноября 2018

Я исправил эту проблему, потому что я использовал «новый клиент», это предотвратит следующее соединение. поэтому я изменил код на это:

MessageService.Client messageServiceClient;
public MessageService.Client getMessageService() {
   if(messageServiceClient!=null){ 
       return messageServiceClient;
   }
   TSocket socket = new TSocket("localhost", 9090, 3000);
   TTransport transport = new TFramedTransport(socket);
   try {
       transport.open();
   } catch (TTransportException e) {
       e.printStackTrace();
   }
   TProtocol protocol = new TBinaryProtocol(transport);
   messageServiceClient = new MessageService.Client(protocol); 
   return messageServiceClient;
}
...