一个thrift服务器/ transport可以实现多个服务吗?

时间:2015-09-07 08:10:33

标签: thrift thrift-protocol

所有教程和文档都建议每个Thrift服务器可以提供一个服务(1个处理程序1个处理器1服务器,所有服务器都在构造函数中提供)。

从我的观点来看(设计的优雅),如果许多或所有服务定义可以独立,那就更好了。

  • 如果可以运行多个服务,那么代码的语法/ api是什么?
  • 或者我是否需要使用一个更大,更丑陋的服务?

1 个答案:

答案 0 :(得分:6)

  

所有教程和文档都建议[...]

不,事实并非如此。文档和教程的存在是为了解释内容,所以他们自然会专注于简单的案例,只是为了简单起见。

但Thrift的前版本确实没有提供这样的功能。从版本0.9.2开始,我们在整个代码库中广泛实现了Support for Multiplexing Services on any Transport, Protocol and Server

用法非常简单。细节取决于语言。例如,这是一个C#客户端:

TTransport trans;
trans = new TSocket("localhost", 9090);
trans = new TFramedTransport(trans);
trans.Open();

TProtocol Protocol = new TBinaryProtocol(trans, true, true);

TMultiplexedProtocol multiplex;

multiplex = new TMultiplexedProtocol( Protocol, Constants.NAME_BENCHMARKSERVICE);
BenchmarkService.Iface bench = new BenchmarkService.Client( multiplex);

multiplex = new TMultiplexedProtocol( Protocol, Constants.NAME_AGGR);
Aggr.Iface aggr = new Aggr.Client( multiplex);

在这种情况下,我们有一台服务器在同一个套接字上提供两个服务,BenchmarkServiceAggr服务。服务器部分以类似的方式设置。整个示例可以找到in the code base under /lib/csharp/test/Multiplex