一个 thrift 服务器/传输层能否实现多个服务?

3

所有的教程和文档都建议每个Thrift服务器只能提供一个服务(1个处理程序、1个进程器、1个服务器,所有这些都在构造函数中给出等)。

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

  • 如果可以运行多个服务,代码的语法/ API是什么?
  • 还是我需要使用一个更大、更丑陋的服务?
1个回答

7

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

不,事实并非如此。文档和教程的存在是为了解释事情,因此它们自然而然地专注于简单的情况,只是为了简单起见。

但确实,以前的 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);

在这种情况下,我们有一个服务器在同一套接字上提供两个服务,即 BenchmarkServiceAggr 服务。服务器部分的设置方式类似。整个示例可以在代码库中的/lib/csharp/test/Multiplex下找到 (链接)

1
谢谢,我正在阅读。这可能是我想要的答案。顺便说一句,如果您是开发团队的人员,我对Thrift(运行时)速度感到非常惊喜。 - Jacek Cz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接