2012-02-22 44 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上下文中,但它当然也提供适当的绑定和通道。要回答您的问题,如果您的通讯具有实时双工要求,那么在保持连接开放的情况下没有什么不妥。