|  |      1Archangel_SDY      2014-01-15 11:51:37 +08:00 又没硬盘又没内存又发不出去,那我觉得你只能下载的时候限速了。 | 
|  |      2chsola OP  1 @Archangel_SDY 并不是完全没有内存,我的小服内存只有16G,下载文件堆积多了爆内存内存再大内存也受不了. 下载到硬盘再发送让用户等太慢,我想做到像uhacks那种即时发送 | 
|  |      3Archangel_SDY      2014-01-15 12:05:04 +08:00 @chsola 那我觉得放内存里也没太大问题,弄个队列控制下任务数吧。 | 
|  |      4shiny      2014-01-15 12:09:14 +08:00 试试 sendfile + proxy ? php 里只要 header 下 http://serverfault.com/questions/425328/send-nginx-x-accel-redirect-request-from-remote-server | 
|  |      5chsola OP  1 @shiny 关键是我需要实现即时的转发,就像http://u-hacks.net/accountboerse.php这个一样 那种方法无法实现即时的文件转发,需要先下载下来我再发送,我是给下载加速的所以也不需要做反盗链或者下载限制什么的,即时性能最重要。 | 
|  |      7chsola OP  1 @shiny 主要是proxy比较难以实现 我需要从uploaded.to获取文件 serverfault上的是个下载认证配置吧... 读文件是本地的 我的文件是即时使用curl从远端获取 菊苣有转发一个文件的示范的话跪求 nginx的proxy模块无法设置cookie,所以不能用于下行。 做nginxmod的话工程量太大。 | 
|  |      9est      2014-01-15 14:54:41 +08:00  1 | 
|  |      10horsley      2014-01-15 15:10:17 +08:00 如果不是像curl下下来那样存储转发的话,我觉得可以用socket的方法,用一个固定大小的小的缓冲区循环read,同时直接输出,这样应该就能少占用内存,直接转发,坏处是断点续传多线程什么的都不支持了 | 
|  |      12suriv520      2014-01-15 16:27:04 +08:00 硬盘也是缓存。缓存是一定得有的。 另外,PHP的模型不适合干这个,别用PHP折腾了…… | 
|  |      13dorentus      2014-01-15 17:03:22 +08:00 @feuvan 改 nginx 配置需要 restart/reload nginx 才能生效。 另外楼主说的这个和 nginx 完全没关系吧。想要改 header 或者设 cookie 完全可以在 PHP 里面做(不过这也和楼主的问题没关系)。 | 
|  |      14chsola OP  1 | 
|  |      15est      2014-01-15 19:58:42 +08:00 | 
|  |      16ovear      2014-01-15 20:18:56 +08:00 - -目前找不到可以读取一部分内容的php api或lib,lz可以找一下,或者用上面所说的 然后每次用完buffer以后,手动的unset试试? | 
|  |      17donwa      2014-01-15 22:33:53 +08:00 如果网盘支持断点续传。 php就可以先下载一部分,传给用户,再下载后续的块继续下载,继续传给用户。 5~6年前好像做过一个php文件来下载大文件的。。。好像是这样的。 | 
|  |      18chsola OP  1 @est 有没有什么方法让nginx发送分割了的文件?我现在在考虑用户提交链接,我去扒取两个2m的片段,开始发送,用户接受完成了一个1m的片段后我开始准备下一个1m片段 并且清理已经发送的1m | 
|  |      19est      2014-01-15 23:24:16 +08:00 @chsola 你的意思是rapidshare本来就是2M一个2M一个的文件,也是多个URL,用户需要点一次就下载完毕,而不需要麻烦人工去挨个点击下载? 这个其实也好做。限制一个session一个下载任务即可。客户端每5秒检查一次是否可以继续下载另外一个文件。这个也兼容老浏览器。 如果你技术足够牛逼可以在服务器接受同时多个TCP连接,保持cwnd置空无数据,但是不要断掉,然后只给其中一个tcp连接返回数据,一个文件传输完毕就关闭tcp连接开始给第二个tcp连接写数据。。依次类推。 现代浏览器的话,可以模仿mega那种,完全用html5的API实现js可控的下载。甚至可以实现多文件顺序下载。不过前后台架构也比较复杂了。 | 
|  |      20chsola OP @est 不是,rapid上可能是几g的超大单文件,我利用高级会员可以断点续传,用户下载到了,我再给准备文件,用户不下载或者距离这个点超过1m,我就不准备 | 
|  |      28donwa      2014-01-16 12:50:03 +08:00 via iPhone  1 | 
|  |      29est      2014-01-16 13:27:34 +08:00  1 @donwa 断点续传需要客户端浏览器大手术。去看看html5 file blob api 吧。 http://stackoverflow.com/a/20254988/41948 https://mega.co.nz/#blog_1 | 
|  |      30chsola OP @est 我看了看实际上要是纠结php的话用php打个socket发送就可以了,发送过程是阻断式所以我知道用户确实接受完毕了文件的片段,断点续传用socket实现也是有可能的。 http://www.cnblogs.com/funlake/archive/2012/04/06/2435241.html 已经有打好的可以用了~ | 
|      31lwd2136      2016-12-29 22:16:04 +08:00  1 这个最后实现没? |