2013-10-27 4 views
4
кода

Сервера:служба мультиплексирование с использованием Apache Бережливость

  TMultiplexedProcessor processor = new TMultiplexedProcessor(); 

      processor.registerProcessor(
       "AddService", 
       new AddService.Processor(new AddHandler())); 

      processor.registerProcessor(
       "MultiplyService", 
       new MultiplyService.Processor(new MultiplyHandler())); 

      TServerTransport serverTransport = new TServerSocket(7911); 



      TSimpleServer server = new TSimpleServer(new TSimpleServer.Args(serverTransport). 
        processor(processor)); 

      System.out.println("Starting server on port 7911 ..."); 
      server.serve(); 

Client Код:

TFramedTransport transport; 

    transport = new TFramedTransport(new TSocket("localhost", 7911)); 
    transport.open(); 


    TProtocol protocol = new TBinaryProtocol(transport); 

    System.out.println("1"); 
    TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol, "AddService"); 
    AddService.Client service = new AddService.Client(mp); 

    System.out.println("2"); 
    TMultiplexedProtocol mp2 = new TMultiplexedProtocol(protocol, "MultiplyService"); 
    MultiplyService.Client service2 = new MultiplyService.Client(mp2); 

    System.out.println("3"); 

    System.out.println(service.add(2,2)); 
    System.out.println(service2.multiply(2000,200)); 

Но когда я бег сервера (на порт 7911) и клиент, клиентский процесс оленьей кожи последние два вызова функций добавления/умножения.

Я мог бы отладить, что аргументы были отправлены на сервер, но сервер не может их обработать.

Любые указания относительно того, что мне не хватает?

+0

Может быть полезно знать язык, особенно с Thrift, как многоязычный интерфейс RPC. C#? C++? Ява? System.out.println() выглядит как последний ... – JensG

+0

Это только в java .. И клиент, и сервер –

+0

Хорошо, что означает «сервер не может их обработать»? Вы получаете сообщение об ошибке или что еще? – JensG

ответ

3

Не проверен, но он очень похож, как если бы вы запускали два разных стека протоколов на сервере и клиенте. Попробуйте следующее:

TMultiplexedProcessor processor = new TMultiplexedProcessor(); 

processor.registerProcessor(
    "AddService", 
    new AddService.Processor(new AddHandler())); 

processor.registerProcessor(
    "MultiplyService", 
    new MultiplyService.Processor(new MultiplyHandler())); 

TServerTransport serverTransport = new TServerSocket(7911); 

TTransportFactory factory = new TFramedTransport.Factory(); 

TServer.Args args = new TServer.Args(serverTransport); 
args.processor(processor); 
args.transportFactory(factory); 
TSimpleServer server = new TSimpleServer(args); 

System.out.println("Starting server on port 7911 ..."); 
server.serve(); 
+0

Спасибо большое! он работает, но не могли бы вы указать мне ссылку, в которой обсуждаются совместимые стеки protocaol. –

+1

Это не очень сложно. Весь стек состоит из (1) протокола (2) транспорта конечной точки и (3) необязательно дополнительного многоуровневого транспорта (ов). В вашем примере это (1) двоичный протокол (2), перенос сокетов, (3) мультиплексированный + фреймворк с рамкой. Вам просто нужно убедиться, что обе стороны используют то же самое сочетание этих ингредиентов. Это все. Хорошим подробным объяснением для новичков является предстоящая книга Рэнди Абернети, уже частично доступная через MEAP: http://www.manning.com/abernethy/ – JensG

Смежные вопросы