1

我正在使用多线程服务器来处理客户端通信,我不知道该服务器可以处理多少个客户端。如果客户数量增加,它是否能够处理它们?我在 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();
                }
            }
        }

4

2 回答 2

2

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

于 2012-06-23T16:53:19.333 回答
0

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

于 2012-06-23T14:44:12.067 回答