2015-09-07 30 views
1

所有的教程和文档都建议每个Thrift服务器可以提供一个服务(1个处理器1个处理器1个服务器,全部在构造函数中给出)。一个节俭的服务器/传输能实现多种服务吗?

从我的角度来看(设计的优雅),如果许多或全部服务定义可以独立,那将会更好。

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

回答

4

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

不,这不是真的如此。文件和教程存在解释的东西,所以他们自然专注于简单的情况下,只是为了简单起见。

但事实上,旧版本的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

+1

谢谢,我现在正在阅读。可能这是我想要的答案。 _BTW如果你来自开发团队,我对节俭(运行时)速度感到非常满意 –