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如果你來自開發團隊,我對節儉(運行時)速度感到非常滿意 –