所有的教程和文档都建议每个Thrift服务器只能提供一个服务(1个处理程序、1个进程器、1个服务器,所有这些都在构造函数中给出等)。
从我的角度来看(设计的优雅性),如果许多或所有服务定义可以是独立的,那就更好了。
- 如果可以运行多个服务,代码的语法/ API是什么?
- 还是我需要使用一个更大、更丑陋的服务?
所有的教程和文档都建议每个Thrift服务器只能提供一个服务(1个处理程序、1个进程器、1个服务器,所有这些都在构造函数中给出等)。
从我的角度来看(设计的优雅性),如果许多或所有服务定义可以是独立的,那就更好了。
所有的教程和文档都建议[...]
不,事实并非如此。文档和教程的存在是为了解释事情,因此它们自然而然地专注于简单的情况,只是为了简单起见。
但确实,以前的 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);
BenchmarkService
和 Aggr
服务。服务器部分的设置方式类似。整个示例可以在代码库中的/lib/csharp/test/Multiplex
下找到 (链接)。