码迷,mamicode.com
首页 > 编程语言 > 详细

Nginx支持用户多线程下载和断点续传

时间:2015-08-17 12:11:24      阅读:168      评论:0      收藏:0      [点我收藏+]

标签: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;
这样,我们就支持多线程下载和断点续传。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Nginx支持用户多线程下载和断点续传

标签:nginx   多线程   服务器   终端   线程   

原文地址:http://blog.csdn.net/zhangli401x/article/details/47721155

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!