2009-10-13 4 views
0

다음 코드를 사용하여 동시 연결 번호 (즉, ClientCount 응용 프로그램 구성 값)를 늘리면 네트워크 작업 (작업 관리자의 네트워크 탭에서 모니터링 됨)이 증가하는지 테스트하려고합니다. 그러나 클라이언트 수를 100에서 500으로 늘려도 네트워크 소비는 여전히 동일합니다 (클라이언트와 서버 측면에서 약 3 % -4 %). 어떤 아이디어가 잘못 되었나요? 클라이언트와 서버의 네트워크 소비량이 동시에 증가하면 동시 접속 수가 증가하는지 증명하고 싶습니다.네트워크 연결 기능이 완전히 사용되지 않았습니다. 이유가 무엇입니까?

내 응용 프로그램 구성 및 클라이언트 측 코드입니다. URL은 로컬 LAN의 다른 컴퓨터에서 IIS 7.0 비트 전송률 제한 제어에서 호스팅되는 wmv 파일입니다. VSTS 2008 + C# + .Net 3.5를 사용하여 클라이언트로 콘솔 응용 프로그램을 개발합니다.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="1000000" /> 
    </connectionManagement> 
    </system.net> 
    <appSettings> 
    <add key="URL" value="http://labtest2/test.wmv"/> 
    <add key="ClientCount" value="100"/> 
    <add key="Timeout" value="3600"/> 
    </appSettings> 
</configuration> 

class Program 
{ 
    private static int ClientCount = 100; 
    private static string TargetURL = String.Empty; 
    private static int Timeout = 200; 

    static void PerformanceWorker() 
    { 
     Stream dataStream = null; 
     HttpWebRequest request = null; 
     HttpWebResponse response = null; 
     StreamReader reader = null; 
     try 
     { 
      request = (HttpWebRequest)WebRequest.Create(TargetURL); 
      request.Timeout = Timeout * 1000; 
      request.Proxy = null; 
      response = (HttpWebResponse)request.GetResponse(); 
      dataStream = response.GetResponseStream(); 
      reader = new StreamReader(dataStream); 

      // 1 M at one time 
      char[] c = new char[1000 * 1000]; 

      while (reader.Read(c, 0, c.Length) > 0) 
      { 
       Console.WriteLine(Thread.CurrentThread.ManagedThreadId + ":\t" + c[0]); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message + "\n" + ex.StackTrace); 
     } 
     finally 
     { 
      if (null != reader) 
      { 
       reader.Close(); 
      } 
      if (null != dataStream) 
      { 
       dataStream.Close(); 
      } 
      if (null != response) 
      { 
       response.Close(); 
      } 
     } 
    } 

    static void Main(string[] args) 
    { 
     TargetURL = ConfigurationSettings.AppSettings["URL"]; 
     ClientCount = Int32.Parse(ConfigurationSettings.AppSettings["ClientCount"]); 
     Timeout = Int32.Parse(ConfigurationSettings.AppSettings["Timeout"]); 
     Thread[] workers = new Thread[ClientCount]; 
     for (int i = 0; i < ClientCount; i++) 
     { 
      workers[i] = new Thread((new ThreadStart(PerformanceWorker))); 
     } 

     for (int i = 0; i < ClientCount; i++) 
     { 
      workers[i].Start(); 
     } 

     for (int i = 0; i < ClientCount; i++) 
     { 
      workers[i].Join(); 
     }   

     return; 
    } 
} 

답변

1

서버에 최대 동시 호출 수 제한이 있는지, 확인할 수 있습니까? 일부 서버는 예를 들어 10 개의 병렬 연결 (또는 실제로는 1 개의 동시 통화로만 단일 스레드가 가능함).

+0

여기서 확인할 서버 측 제한은 무엇입니까? web.config 또는 IIS 관리자에서? – George2

+0

Windows Server 2008 용 IIS 7에서 정상적으로 작동 해 보았습니다. 그러나 Windows 7 용 IIS 7에는 문제가 있습니다. 이유는 무엇입니까? – George2

관련 문제