2013-10-27 2 views
4

서버 코드 :서비스 다중 이용하여 아파치 드리프트

  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 포트에서 수신)와 클라이언트는 클라이언트 나던 과정 마지막 두 번은 덧셈/곱하기 함수를 호출합니다.

인수가 서버로 전송되었지만 서버에서 처리 할 수 ​​없다는 것을 디버그 할 수 있습니다.

내가 누락 된 부분에 대한 설명이 있습니까?

+0

특히 다국어 RPC 프레임 워크로서의 Thrift를 사용하면 언어를 아는 데 도움이됩니다. 기음#? 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

고마워요 !! 그것은 작동하지만, 당신은 compatiable protocaol stacks을 논하는 링크를 가르쳐 주시겠습니까 –

+1

그건 정말 복잡하지 않습니다. 전체 스택은 (1) 프로토콜 (2) 종점 전송 및 (3) 선택적으로 추가 계층화 된 전송 (들)로 구성됩니다. 샘플에서 이것은 (1) 바이너리 프로토콜 (2) 소켓 전송, (3) 다중화 + 프레임 된 fransports입니다. 당신은 단순히 양쪽이 이들 성분의 정확한 혼합을 사용하고 있는지 확인해야합니다. 그게 다야. 초보자를위한 심층적 인 설명은 이미 부분적으로 MEAP를 통해 사용할 수있는 Randy Abernethy의 책입니다 : http://www.manning.com/abernethy/ – JensG