2015-02-23 32 views
2

最近我們用Apache Thrift替換了我們的內部消息庫。在我們的設置中,我們有幾個c#服務和幾個連接到它們的C++「客戶端」。在開始我們使用TThreadPoolServer作爲服務器實現。Thrift Nonblocking Server c#

_server = new TThreadPoolServer(processor, serverTransport); 

因爲它工作得很好所以我們也取代了我們最後的服務器。該服務器需要與超過400個客戶進行通信。我們看到的問題是,儘快連接了客戶端號碼100,我們的服務器停止接受新的連接,甚至沒有調用c#定時器。它似乎窒息,直到第一個客戶端斷開連接。

通過閱讀SO Large number of simulteneous connections in thrift我們決定改變TThreadedServer,增加線程的最大數目爲500,我們有一個可行的解決方案。

_server = new TThreadedServer(processor 
    , serverTransport 
    , new TTransportFactory() 
    , new TTransportFactory() 
    , new TBinaryProtocol.Factory() 
    , new TBinaryProtocol.Factory() 
    , 500 
    , DebugLogThriftServer); 

不過我想有TNonblockingServer,因爲它是在舊貨C++庫已經實施。我想知道是否有人已經爲c#寫了一個。

回答

0

這是一個使用標準thrift協議的RPC框架,它與使用節約IDL來定義服務的效果相同,即thrify可以與使用節約IDL的代碼兼容,這對於跨平臺的。

[ThriftStruct] 
public class LogEntry 
{ 

    [ThriftConstructor] 
    public LogEntry([ThriftField(1)]String category, [ThriftField(2)]String message) 
    { 
     this.Category = category; 
     this.Message = message; 
    } 

    [ThriftField(1)] 
    public String Category { get; } 

    [ThriftField(2)] 
    public String Message { get; } 
} 

[ThriftService("scribe")] 
public interface IScribe 
{ 
    [ThriftMethod("getMessages")] 
    List<LogEntry> GetMessages(); 

    [ThriftMethod] 
    ResultCode Log(List<LogEntry> messages); 
} 

public class Scribe : IScribe 
{ 
    public List<LogEntry> GetMessages() 
    { 
     return new List<LogEntry> 
     { 
      new LogEntry { Category = "c1", Message = Guid.NewGuid().ToString() }, 
      new LogEntry { Category = "c2", Message = Guid.NewGuid().ToString() }, 
      new LogEntry { Category = "c3", Message = Guid.NewGuid().ToString() } 
     }; 
    } 

    public ResultCode Log(List<LogEntry> messages) 
    { 
     return ResultCode.TRY_LATER; 
    } 
} 

你可以嘗試:https://github.com/endink/Thrifty

+0

雖然此鏈接可以回答這個問題,最好是在這裏有答案的主要部件,並提供鏈接以供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18143174) – Xenolightning 2017-12-04 03:49:43

+0

好的,我編輯過 – 2017-12-04 04:31:19