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

Jac*_* Cz 2 thrift thrift-protocol

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

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

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

Jen*_*nsG 6

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

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

但事实上,以前的Thrift版本没有提供这样的功能.从版本0.9.2开始,我们在整个代码库中广泛实施的任何传输,协议和服务器上支持多路复用服务.

用法很简单.细节取决于语言.例如,这是一个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);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们有一台服务器通过同一个套接字提供两个服务BenchmarkService,即Aggr服务.服务器部分以类似的方式设置.整个示例可以在代码库下找到/lib/csharp/test/Multiplex.