簡體   English   中英

我如何知道我的網絡客戶端打開了多少個連接?

[英]How do I know how many connections are opened by my webclient?

我有一個簡單的 webclient,它只是將 POST 消息發送到服務器並獲得響應。 我通過覆蓋 System.Net.WebClient)' 的 GetWebRequest(...)' 來設置KeepAlive=true以使用持久連接。

我的客戶端與之通信的服務器對我可以打開的連接數有限制(我猜是為了避免 DoS 攻擊!)。 我的客戶端只是並行地對該服務器執行一堆查詢 - 所以為了限制我對服務器發出的請求數量,我使用了信號量(請參閱代碼片段) - 即確保我沒有超過任何給定的連接限制時間。

但是,在特定客戶的環境中,服務器通過說“已達到連接限制”來主動拒絕請求。

我的問題

  1. 我如何知道在任何給定時刻,我的客戶端對服務器打開了多少個連接? 我正在使用 Fiddler - 但不太確定此信息是否可用?

  2. 由於我限制使用信號量發出的請求數量(在本例中為 75),假設其他客戶端或應用程序從客戶的盒子到服務器沒有打開連接,那么 .net 是否有可能打開超過“75”持久連接,因為我將“保持活動”設置為 true。 我的猜測是因為最多只有 75 個請求,連接不應超過 75 個,所有進一步的請求只是重用現有的連接。 但是,因為我看不到 - 我猜我無法確認。

使用信號量限制並發請求數:

 Semaphore semaphore = new Semaphore(initialCount:75, maximumCount:75);
            try
            {
                //at any given time do not send more than 75 requests to server
                semaphore.WaitOne();
                using (var myWebClient = new MyWebClient(timeoutSeconds: 300, useragent: "dreamer"))
                {
                    byte[] responseBytes = myWebClient.UploadData("http://myserverurl",
                        UTF8Encoding.UTF8.GetBytes("inputMessageRequest"));
                }
            }
            finally
            {
                semaphore.Release();
            }

我的 Web 客戶端(通過覆蓋 GetWebRequest 將 keep alive 設置為 true):

 class MyWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
            request.UserAgent = this.UserAgent;
            request.KeepAlive = true;
            request.Timeout = this.TimeoutSeconds;
            request.PreAuthenticate = true;
            return request;
        }
        public int TimeoutSeconds { get; set; }
        public string UserAgent { get; set; }        
        public MyWebClient(int timeoutSeconds, string useragent)
        {
            this.TimeoutSeconds = timeoutSeconds;
            this.UserAgent = useragent;

        }        

    }

相關鏈接

  1. 如何以編程方式刪除 WebClient 中的 2 個連接限制

  2. 最大並發 HttpWebRequests 數

  3. 嘗試並行運行多個 HTTP 請求,但受 Windows(注冊表)限制

  4. 如何在 C#/.NET 中設置或增加持久性 HTTP 連接的數量

也許這可能會有所幫助...

http://www.codeproject.com/Articles/23306/ASP-NET-Performance-and-Scalability-Secrets

查看標題為“防止拒絕服務 (DOS) 攻擊”的部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM