2015-09-07 49 views
1

所有的教程和文檔都建議每個Thrift服務器可以提供一個服務(1個處理器1個處理器1個服務器,全部在構造函數中給出)。一個節儉的服務器/傳輸能實現多種服務嗎?

從我的角度來看(設計的優雅),如果許多或全部服務定義可以獨立,那將會更好。

  • 如果可以運行多個服務,代碼的語法/ api是什麼?
  • 或者我需要使用一個更大更醜陋的服務嗎?

回答

4

所有教程和文檔建議[...]

不,這不是真的如此。文件和教程存在解釋的東西,所以他們自然專注於簡單的情況下,只是爲了簡單起見。

但事實上,舊版本的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); 

在這種情況下,我們有一臺服務器在同一個插座,提供兩種服務,該BenchmarkServiceAggr服務。服務器部分以類似的方式建立。整個例子可以找到in the code base under /lib/csharp/test/Multiplex

+1

謝謝,我現在正在閱讀。可能這是我想要的答案。 _BTW如果你來自開發團隊,我對節儉(運行時)速度感到非常滿意 –