多线程服务器可以处理多少个客户端?

时间:2012-06-23 08:47:50

标签: c#

我使用多线程服务器来处理客户端通信,我不知道这个服务器可以处理多少个客户端。如果客户数量增加,它能够处理它们吗?我在core2duo处理器上使用它。 如果我将一半客户端重定向到另一个端口的新服务器,那么在不同端口上启动服务器是否会解决问题?

这是我的服务器代码

Public void ListenForClients()
        {
            this.tcpListener.Start();

            while (true)
            {      
                try
                {
                    TcpClient client = this.tcpListener.AcceptTcpClient();
                    NetworkStream clientStream = client.GetStream();   //create networkstream for connected client                         
                    Console.WriteLine(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());//client ipaddress
                    Console.WriteLine("connecting..");
                    Thread clientThread = new Thread(new ParameterizedThreadStart(updatedb));                    
                    clientThread.Start(client);

                }
                catch (Exception ex)
                {
                    Console.WriteLine("exception" + ex.ToString());
                    Console.ReadLine();
                }
            }
        }

2 个答案:

答案 0 :(得分:2)

我建议你阅读this blog post以及作者的类似帖子。他详细解释了IIS / ASP.NET如何使用多线程。
您必须记住的是,即使您可以创建更多线程(例如,通过运行您的应用程序的另一个实例,如您所建议的那样),它也不意味着您的应用程序将更快地响应/更快地返回客户的预期答案,因为在任何给定时刻,只有与您的服务器具有的CPUS数量一样多的运行线程。
我不认为你需要编写你的代码以期望崩溃,但是要在更多的异步处理方向上工作,因为ISS服务器(实际上也是这样做 - 服务TCP连接)正在做。没有理由不使用.NET提供的线程池,让它在每个给定时刻处理共存线程的实际数量,并让其他请求队列直到一个线程变为availibale。

答案 1 :(得分:0)

如果没有真正尝试,其他一切都是猜测。正如Hans Passant所说,为每个请求创建新线程的策略将无法很好地扩展。一开始看起来似乎没什么问题,但你应该会看到几百个同时用户的性能严重下降。此外,看起来工作将与数据库(updatedb)进行通信,因此您创建的这些线程只是将数据发送到外部进程并等待回复?这是线程最糟糕的用法。看看您是否可以使用asynchronous sql updates