使用Apache Thrift进行服务多路复用 [英] Service Multiplexing using Apache Thrift

查看:210
本文介绍了使用Apache Thrift进行服务多路复用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

服务器代码:

  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服务器=新的TSimpleServer(新的TSimpleServer.Args(serverTransport)。
处理器(处理器));

System.out.println(在端口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函数。



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

关于我缺少什么的任何指示?

解决方案

未经测试,但它看起来非常像在服务器和客户端上运行两个不同的协议栈。试试这个:

  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服务器=新的TSimpleServer(args);

System.out.println(在端口7911上启动服务器......);
server.serve();


Server code:

            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 Code:

    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));

But when I am running the server(listening on port 7911) and the client, the client doesnt process the last two calls to the add/multiply functions.

I could debug that the arguments have been sent to the server, but the server is not able to process them.

Any pointers as to what i am missing?

解决方案

Not tested, but it looks very much like as if you run two different protocol stacks on server and client. Try this:

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();

这篇关于使用Apache Thrift进行服务多路复用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆