我有下載開始時可用的內容長度。所以我知道我需要多少字節請求。 我以1024字節的塊形式下載。在最後的塊中,我請求剩餘的字節數。我正在使用閱讀功能。 但最後一塊需要很多時間才能到達。這是正常的嗎?爲什麼HTTP下載的最後一塊很慢?
回答
謝謝 我想出了問題。我的代碼使用應用程序級緩衝區,因此最後一個塊需要很長時間才能下載。 我一直在使用布賴恩特的書中給出的健壯的io函數。我曾經研究過那些代碼,並忘記了它。我修改了代碼,發現代碼使用了緩衝。
,我用被HTTP/1.1製造另一個錯誤。 HTTP 1.0會導致服務器在傳輸數據後關閉連接。 這樣就解決了這個問題。
您可以在HTTP/1.1中使用請求頭'Keep-Alive:close' – Piskvor 2009-11-09 10:00:02
也許你最後的塊不夠大,無法刷新緩衝區。
您可以檢查如何刷新fd並在發送最後一個塊後手動執行。
我不明白你的觀點。 – 2009-09-21 13:18:54
當您發送1024個字節時,它看起來足以讓文件描述符內部緩衝區自行刷新。如果內容大小很小,fd將等待超時,然後刷新,或者關閉它。 – 2009-09-21 13:22:44
我要求的字節數爲最後一個塊所需的字節數,而不是1024. – 2009-09-21 13:24:50
不,我的猜測是服務器缺少對flush()
的調用,所以輸出在某個緩衝區中掛起,直到超時(然後服務器將刷新)。
但我的網頁瀏覽器也應該花時間下載頁面。事實並非如此。瀏覽器立即加載頁面。而我的程序大約需要8秒鐘,大部分時間都在等待最後一塊。 – 2009-09-21 13:23:02
瀏覽器將根據迄今發送的內容開始動作。例如在PHP中,在寫出網頁的「頭部」後調用'flush'是一個好主意,這樣瀏覽器就可以開始加載'head'的內容,而頁面的其餘部分正在寫入/加載。瀏覽器也會嘗試在網頁上獲得標記時立即解析/呈現頁面。這很可能就是爲什麼你在瀏覽器中看到即時渲染的原因。 – geowa4 2009-09-21 13:28:56
好吧忘了瀏覽器。我看到與telnet相同的行爲。 – 2009-09-21 13:33:33
- 1. 爲什麼在rake下rspec很慢? ruby_noexec_wrapper?
- 2. 爲什麼方法很慢?
- 3. 爲什麼lockCanvas()很慢?
- 4. 爲什麼ODBC很慢?
- 5. 爲什麼babel transpilation很慢?
- 6. 爲什麼MinGW很慢?
- 7. 爲什麼在Vim的插入模式下粘貼很長的一行很慢?
- 8. ffmpeg的HTTP慢於下載第一
- 9. WebClient.DownloadString()很慢下載重複
- 10. 爲什麼我的基本PyGame模塊很慢?
- 11. 爲什麼我的MySQL查詢很慢?
- 12. 爲什麼我的查詢很慢?
- 13. 爲什麼我的程序很慢?
- 14. 爲什麼我的Ajax響應很慢?
- 15. 爲什麼我的requestAnimFrame仍然很慢?
- 16. 爲什麼SQL的導入很慢?
- 17. 爲什麼全屏圖像滑塊仍然很慢?
- 18. 爲什麼迭代一個很大的std :: list會這麼慢?
- 19. 爲什麼Gallery很慢/訪問GoogleLoginService?
- 20. 爲什麼公鑰算法很慢?
- 21. 爲什麼jQuery $ .ajax工作得很慢?
- 22. 爲什麼sql.rows Groovy方法很慢
- 23. 爲什麼ftp目錄列表很慢?
- 24. 爲什麼釋放速度很慢?
- 25. 爲什麼這個Haskell函數很慢?
- 26. 爲什麼涌入性能很慢
- 27. 爲什麼Boolean()在Javascript中很慢?
- 28. 爲什麼刷新html頁面很慢
- 29. R diff函數爲什麼很慢?
- 30. 爲什麼Crystal Reports Query很慢?
如果您的瀏覽器和telnet處理得當,但您的客戶端沒有,那麼爲什麼不發佈相關的代碼片段。 – Duck 2009-09-21 13:52:50