2013-10-27 80 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