2014-09-29 81 views
1

我想開發一個使用WCF的TCP服務器應用程序,它必須是高度可擴展的高性能服務器,可以處理至少200個併發連接:通過GPRS從客戶端獲取原始數據。如何爲數百個併發連接優化/設計WCF?

我的數據包括:

public class RawData 
{ 
    public string deviceID { get; set; } 
    public string timeStamp { get; set; } 
    public string messageType { get; set; } 
    public string driverId { get; set; } 
    public string senosrs { get; set; } 
    public string startStatus { get; set; } 
    public string x { get; set; } 
    public string y { get; set; } 
    public string course { get; set; } 
    public string speed { get; set; } 
    public string satCount { get; set; } 
    public string signal { get; set; } 
    public string message { get; set; } 
} 

而且我的問題是:

  1. 什麼是最好的結合可以使用嗎?
    我想通過連接到我們的服務器來回撥我的客戶端。

  2. 如何檢查wcf數據包大小?
    我已經使用了本教程: http://zamd.net/2008/08/15/calculating-wcf-message-size/ 我的數據包長500!它是以字節還是其他單位?

  3. WCF足夠適合我們的情況嗎?我們使用gprs作爲DataNetwork。

  4. 在這種情況下是否需要實現路由服務?

  5. 什麼是這個問題的最佳編碼?最佳壓縮*速度。

+0

你們全都在同一個網絡上嗎? – 2014-09-29 13:46:39

+0

是的,所有的客戶端在同一個網絡上,gprs APN – david 2014-09-29 17:18:31

回答

1

在回答你的問題:

  1. netTcpBinding - 這是最高效的結合,因爲它基本上是原始套接字。它也支持duplex

  2. 如果您需要將其作爲一次性使用而不是生產監控,請嘗試配置wcf tracing。這可以使用通道絕對記錄每條消息。

  3. 有點。 200個併發傳入的連接(如果你的服務是stateless)爲fairlyeasy(儘管可能需要小scale out),但雙工 WCF是最好的複雜和重要的does not scale well - 你要麼需要一個單一的服務實例的所有客戶端,或者你需要一些持久的後備存儲來同步客戶端回調代理(儘管這可以通過caching有效實現)。

  4. 除非您需要根據消息內容動態更改端點,在網絡協議之間進行轉換等,否則在此方案中我看不到任何需要用戶wcf-routing,而不是作爲一種負載平衡器。如果您確實需要擴展,則最好使用實際的網絡負載平衡器。

  5. 只要通道的兩端都是WCF,netTcpBinding默認使用二進制編碼。這是WCF中最具約束力的optimized綁定。