2013-10-27 42 views
4

Server代码:服务多元化使用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(); 

客户端代码:

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监听)和客户端,客户端犯规进程最后两次调用add/multiply函数。

我可以调试参数已发送到服务器,但服务器无法处理它们。

任何指针,至于我失踪?

+0

可能有助于了解语言,尤其是Thrift作为多语言RPC框架。 C#? C++? Java的? 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

非常感谢!它的工作原理,但你能请我指出一个链接,讨论兼容prot Protol堆栈 –

+1

这并不是很复杂。整个堆栈由(1)协议(2)端点传输和(3)可选的附加分层传输组成。在您的示例中,这是(1)二进制协议(2)套接字传输,(3)多路复用+帧fransports。您只需确保双方都使用这些成分完全相同的混合物。就这样。对初学者的深入解释是Randy Abernethy即将出版的书籍,已经部分通过MEAP提供:http://www.manning.com/abernethy/ – JensG