2013-10-12 18 views
0

所以我在過去曾經使用過WCF,並且我知道你不僅可以將它用於Web服務,而且還可以用於持久化的TCP客戶端/服務器應用程序,但是我從來沒有真正使用它。WCF適用於低延遲持久連接本地客戶端/服務器應用程序嗎?

我正在研究爲.NET創建一個客戶機/服務器應用程序,該應用程序將在本地運行,即服務器和多個客戶機都將在同一臺機器上運行。不會有大量的同時連接,最多可能有50個。每個請求傳輸的數據量不會太多,大部分是40-100字節左右的小對象。雖然會有很多不同的對象類型,但我更喜歡使序列化簡單的解決方案。

最大的問題是我需要快速連續發送很多數據包,而且我不能承受很大的延遲。理想情況下,我需要100字節數據包的往返時間少於1毫秒(假設沒有處理時間用於處理服務器上的數據)。

我知道這是可能的原生Winsock/IOCP的解決方案,因爲我有一個解決方案,可用於另一個項目,但我不知道這是WCF可以處理的事情,因爲我不知道多少處理開銷涉及每個請求/響應,或者它使用什麼樣的異步IO。

那麼,你認爲WCF可以爲此工作嗎,還是我需要創建一個底層的基於套接字的解決方案?

+0

我仍然會使用* a *庫 - 無需手動執行此操作。話雖如此,有可能比WCF更好的候選人(搜索「對象請求代理」或「rpc」 - 可能是很好的讀取)。就編碼而言,我發現[Protocol Buffers](http://en.wikipedia.org/wiki/Protocol_Buffers)爲這種用例提供​​了一個很好的序列化目標 - 它快速,緊湊並且支持反射/ POCO(如[Protobuf.NET](https://code.google.com/p/protobuf-net/))和生成的類型實現(如[ProtoGen](https://code.google.com/p/protobuf的-CSHARP端口/))。 – user2864740

+0

你知道,我幾星期前只是在看Protobuf的其他事情,不知何故,它甚至沒有在我的腦海中想到。我很可能走這條路,因爲我相信Protobuf.NET應該與protobuf的本地C++實現二進制兼容,這將是一個不錯的獎勵。 – Gerald

回答

2

是的,使用NamedPipes進行進程間全雙工通信。非常快,不會通過tcp。只有在一切運行在同一臺機器上的情況下才有效。

This article應該有所幫助。

+0

我不知道WCF支持命名管道。你碰巧知道是否可以在WCF中設置管道的完整性級別?我的要求之一是服務器將作爲一個高度完整的Windows服務運行,並且我需要從一個低完整性的進程與它通信。 – Gerald

+1

@傑拉德這會有所幫助;正是你在做什麼: https://blogs.charteris.com/blogs/chrisdi/archive/2011/02/15/named-pipe-communication-with-low-integrity-clients.aspx –

+0

非常酷,謝謝 – Gerald

相關問題