服务器架构

时间:2011-07-09 21:39:48

标签: c# .net sockets

希望有两个与创建服务器应用程序相关的简单问题:

  • 是否有可以打开的同时插座数量的理论/实际限制?一旦到达,就忽略处理数据所需的资源!如果我的目标是.net框架
  • 每个连接是应该在一个永久分配给它的单独线程中运行,还是应该使用线程池?专用线程方法看起来更简单,但有100个线程运行一次似乎很奇怪。这是可接受的做法吗?

非常感谢任何建议 Venatu

3 个答案:

答案 0 :(得分:2)

有实际限制,是的。但是,在您到达之前很久,您很可能会耗尽资源来处理负载。在连接数量之前,CPU或内存更有可能耗尽。

为了获得最大的可伸缩性,您不希望每个连接都有单独的线程,而是使用异步模型,该模型仅在维护活动(如接收或发送数据)连接时使用线程。

答案 1 :(得分:2)

您可能会发现following answer很有用。它说明了如何使用.NET线程池和异步套接字方法(BeginAccept / EndAccept和BeginReceive / EndReceive)编写可伸缩的TCP服务器。

据说,当您可以使用众多WCF绑定之一(甚至编写自定义绑定)并从WCF基础架构的全部功能中受益时,编写自己的服务器并不是一个好主意。它可能比每个自定义编写的服务器都更好地扩展。

答案 2 :(得分:1)

正如我记得的那样(很久以前就做过套接字)实现它们的最好方法是使用带有线程池的异步回调的ReceiveAsync(.NET 3.5)/ BeginReceive方法。不要为每个连接打开一个线程,这是浪费资源。