我在使用HttpWebRequest對嵌入式設備上的HTTP守護進程時遇到問題。問題似乎是,在寫入到套接字流的http頭文件和http有效內容(POST)之間存在足夠的延遲,即套接字將套接字緩衝區中的內容釋放到服務器。這導致HTTP請求被分成兩個分組(分片)。如何防止HttpWebRequest的數據包碎片
當然,這是完全有效的,但是如果數據包被拆分超過大約1.8ms,那麼服務器的另一端就無法處理它。所以我想知道是否有任何現實的方法來控制這個(在客戶端)。
在HttpWebRequest上沒有任何屬性可以控制用於發送的套接字,並且不能訪問套接字本身(即通過反射),因爲它只是在創建期間創建的發送,然後發佈(作爲出站http連接池的一部分)。 BufferWriteStream屬性只是緩存webrequest中的正文內容(所以它仍然可用於重定向等),並且不會影響整個請求寫入套接字的方式。
那該怎麼辦?
(我真的想避免從插座高達重寫HTTP客戶端)
一種選擇可能是寫某種的HttpWebRequest的發送給代理的(也許通過的ServicePoint) ,並在該實現中緩衝整個TCP請求。但是這似乎是一項艱苦的工作。
當我跑步時Fidder酒店(出於同樣的原因),但不是真正的在我們的生產環境中的選項,也能正常工作......
[PS:我知道這是肯定的零碎數據包之間的時間間隔這是問題所在,因爲我敲了一個套接字級測試,在那裏我使用NoDelay套接字明確控制了分段]
你做到完美努力理解這個問題。你唯一忘記的是服務器。它的行爲是不正常的,它必須在超時間隔(大約20-100秒)內接收所有的數據包。因爲它是一個RFC標準。有沒有可能修復服務器? – 2010-02-05 12:20:03
我已經問設備供應商這個問題,但作爲一個嵌入式設備,我懷疑這可能會變得複雜,這就是爲什麼我試圖找到客戶端修補程序。 – piers7 2010-02-07 14:11:27