RFC2616規範中定義了range協議,它給出一種規則使得客戶端可以再一次請求中只下載完整文件的一部分,這樣就支援客戶端在開啟多線程的同時下載一份文件,其中每個執行緒僅下載文件的一部分,最後組合成完整的文件,range也支援斷點續傳,只要客戶端記錄了已下載部分文件偏移量,就可以要求伺服器從斷點處發送文件之後的內容。
Nginx對range協定支援的非常好,因為range協定主要增加了一些HTTP頭部處理流程,以及傳送檔案時的偏移處理。 Nginx設計了HTTP過濾模組,每個請求可以由許多HTTP過濾模組處理,而http_range_header_filter模組就是用來處理HTTP請求頭部range部分,它會解析客戶端請求中的range頭部,最後告知在發送HTTP回應包體時將會呼叫到ngx_http_range_body_filter_module模組,該模組會依照range協定修改指向檔案的ngx_buf_t緩衝區的file_pos和file_last成員,以此實作僅傳送一個檔案的部分內容到客戶端。
其實,支援range協定對我們來說很簡單,只需要在傳送前設定ngx_http_request_t的成員allow_ranges變數為1即可,之後的都會由HTTP框架完成。 eg:
r->allow_ranges = 1;
這樣,我們就支援多執行緒下載和斷點續傳。
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
以上就介紹了Nginx支援用戶多執行緒下載和斷點續傳,包括了方面的內容,希望對PHP教學有興趣的朋友有所幫助。