1
所有的教程和文档都建议每个Thrift服务器可以提供一个服务(1个处理器1个处理器1个服务器,全部在构造函数中给出)。一个节俭的服务器/传输能实现多种服务吗?
从我的角度来看(设计的优雅),如果许多或全部服务定义可以独立,那将会更好。
- 如果可以运行多个服务,代码的语法/ api是什么?
- 或者我需要使用一个更大更丑陋的服务吗?
所有的教程和文档都建议每个Thrift服务器可以提供一个服务(1个处理器1个处理器1个服务器,全部在构造函数中给出)。一个节俭的服务器/传输能实现多种服务吗?
从我的角度来看(设计的优雅),如果许多或全部服务定义可以独立,那将会更好。
所有教程和文档建议[...]
不,这不是真的如此。文件和教程存在解释的东西,所以他们自然专注于简单的情况下,只是为了简单起见。
但事实上,旧版本的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
。
谢谢,我现在正在阅读。可能这是我想要的答案。 _BTW如果你来自开发团队,我对节俭(运行时)速度感到非常满意 –