Nginx支持用戶多線程下載和斷點續傳

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;
這樣,我們就支持多線程下載和斷點續傳。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章