2011-08-25 18 views
2

我正在爲我正在編寫的項目在C#.net上進行套接字編程。c#.net中的套接字上的多個對象的序列化和反序列化.net

該項目將是一個多客戶端系統,其客戶端服務監視系統資源並向中央服務器報告。

我正在研究Remoting,WCF等,以確定哪些對我最合適。我套接字編程解決由於一些要求:

  • 套接字是比其他人更快小的開銷
  • 我可以支持服務器上的每個資源更多的連接
  • 套接字可以,具有儘管修改,也允許我與基於UNIX的系統進行交互。
  • 我可以在代碼中自己實現加密,而不必依賴SSL證書。

我在這裏的想法可能是錯的嗎?如果我願意,請告訴。有些人建議WCF「可以使用」,並做我想要的一切,但我相信這是慢得多的開銷。

我的主要問題是,雖然客戶端機器不會保持連接打開狀態,但可能會有數千或數萬個客戶端計算機,我不得不假設該計算機將受到連接打擊。考慮到每個客戶端之間的最短連接時間可能小至1分鐘。

現在到我手邊的問題:如何通過鏈接發送多個對象,更重要的是如何確定他們在另一邊?

我假設這是可能通過一個連接,因爲我已經閱讀了大量的文章這樣說,雖然他們描述的方法不同,所以是例子。

問題是我找不到任何實際執行此操作的示例。沒有例子顯示如何發送多個對象,然後如何確定他們在另一邊。

任何人都可以在這裏幫我或指點我的例子。一旦我有了一個工作基地,我可以很好地理解這些東西。

回答

2

感覺就像過早優化和重塑車輪的經典案例。我可能會誤解,因爲我不知道你的性能要求,開發資源和時間框架。但我懷疑,很聰明的人在你面前也有同樣的問題。他們想出了各種解決方案,包括HTTP(SOAP,REST)和XMPP(如果你想要有狀態的協議)。即使在應用程序級別上也可以做很多工作來提高性能(最大限度地減少通過線路傳輸的數據量,緩存等)。沒有直接使用套接字引入的複雜性開銷。你可能知道所有這些,但我強烈建議你再次評估你的決定。

至於平時序列化格式嫌疑人,如XML和JSON,你可能也想看看Protocol Buffers

協議緩衝區是二進制序列化格式的名稱中使用 由谷歌爲他們大部分的數據通信。它的設計是:

  • 體積小 - 高效數據存儲(遠遠超過XML小)
  • 便宜工藝 - 無論是在客戶端和服務器獨立
  • 平臺 - 便攜式
  • 可擴展 - 向舊消息添加新數據
+0

通過電話發送的信息應該很小。類似的參考方案是HoundDog(現在由GFI所有,稱爲GFI MAX)。客戶端本質上是非常輕量級的,您可以設置它們來監控每隔多少分鐘/秒等等,並根據需要發送警報,同時發送ping讓總部服務器知道它仍然存在。所以非常少的數據。這個問題更多的是一個問題,會有多少客戶端:每個服務器可能有數千個客戶端。你認爲使用WCF會是更好的選擇嗎?我只是怕我不得不全力以赴。 – Anthony

+0

至於時限,這是我自己的項目(其中包括),我正在爲失業而工作。所以通常我有我需要的所有空閒時間。我很想學習套接字編程,但我也想在一兩個月內看到一個工作模型。如果他們長期工作,我真的不介意使用新的方法(或封裝)。 – Anthony

+0

另外,我最初(在VB6的方式)是一個Windows窗體程序員...然後我轉移到ASP.NET Web窗體,並已在那裏多年,所以這是第一次冒險回到Windows窗體編程爲了我。我知道這些差異,並且很瞭解網絡。簡而言之,我正在討論其他人在文章中所說的內容,並幫助博客等。因爲許多人說WCF是「沉重的」,但接下來就像你說的「使用套接字引入的複雜性開銷」也可能是對我來說,皺眉的因素... Sheesh,它從來沒有直接的是它:) – Anthony

1

您可能試圖在這裏重新發明輪子。但既然你已經確立了自己不想使用套接字(被那裏,這樣做,學到了很多),閱讀序列化這些鏈接:

+0

當你說「在這裏重新發明輪子」時,你究竟是什麼意思?如果有更好,更快,更標準的方式,我就會全神貫注。然而,我可能會像你說的那樣,從底層開始學習很多東西。 – Anthony

+0

好吧,看完這些之後,我假設你指示我使用JSON或XML發送我的對象。它是否正確?這是現在應該完成的方式嗎?請記住,我所提供的大多數示例都來自2008/2009左右 – Anthony