2012-02-22 42 views
1

當我正在嘗試使用C#和WCF時,我一直在閱讀的內容之一是如何讓客戶端連接到服務器。雖然WCF允許,如果您想要有任何體面的可擴展性,似乎建議的最佳做法是使用「每次調用」而不是「每個會話」進行實例管理。IRC協議 - 恆定的客戶端連接好嗎?

從我瞭解IRC使用(服務器的網絡孔)服務器和IRC服務器恆定的客戶端連接

但是在任何給定的時間服務成千上萬的客戶(如果我錯了請指正)。那麼在那種情況下,保持客戶端與服務器的連接是否真的沒什麼不好?

+0

http://en.wikipedia.org/wiki/C10k_problem – CodesInChaos 2012-02-22 19:17:46

+0

其實,最近也許一個更有趣的例子是web-sockets – 2012-02-22 19:47:40

+0

imho你不應該使用WCF IRC,但純粹的套接字或套接字框架。 – jgauffin 2012-02-23 07:54:59

回答

3

只要你不遵循一個線程每個連接的架構,一臺服務器可以支持相當大量的併發的TCP連接。

IRC不需要每個連接的狀態多,超出了TCP發送和接收窗口。

+0

+1點。 – jgauffin 2012-02-23 07:55:45

0

是的,這樣的架構是可行的,但... "ping? pong!"的東西是有原因發明的 - 讓雙方都知道另一方仍然存在。您實際上無法確定客戶端是否處於空閒狀態,因爲它沒有太多說明,或者實際上已斷開連接,並且您正在等待TCP超時。

UPD:「客戶成千上萬的」關於IRCnet只是因爲服務器的網絡中是可能的。對於單臺機器而言,C10K problem仍然是一個問題。

+0

我還想補充一點,可能是因爲IRC服務器本身並不能很好地擴展,IRC服務器有*網絡的原因。此外,如果您將其與Skype等進行比較,IRC幾乎不會被任何人使用。因此,對於爲數百萬用戶提供服務的現代應用程序,保持連接的建議聽起來不錯,但如果您最多隻需要10個客戶端,那麼保持連接始終處於打開狀態沒有任何問題。 – 2012-02-22 19:09:17

1

如果您需要實時雙工通信(IRC是一個聊天協議),然後保持一個TCP連接活着是相關選項。但是,TCP連接帶來網絡開銷,操作系統對併發打開的TCP連接數量有實際的限制。 WCF通常用於不需要雙工通信的SOAP/HTTP/RPC上下文中,但它當然也提供適當的綁定和通道。要回答您的問題,如果您的通訊具有實時雙工要求,那麼在保持連接開放的情況下沒有什麼不妥。