所有教程和文档都建议每个Thrift服务器可以提供一个服务(1个处理程序1个处理器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);
在这种情况下,我们有一台服务器在同一个套接字上提供两个服务,BenchmarkService
和Aggr
服务。服务器部分以类似的方式设置。整个示例可以找到in the code base under /lib/csharp/test/Multiplex
。