关于分段下载+中继的实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
x1155665
V2EX    问与答

关于分段下载+中继的实现

  •  
  •  x1155665 2016-05-16 04:27:39 +08:00 3171 次点击
    这是一个创建于 3446 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想写个下载中转的程序,,问问大家有什么好的实现方法。

    需求:
    中继的服务器储存空间捉急(搬瓦工:怪我咯?),只能通过分段下载,传送分段给客户端,传送完马上删除已传送的分段的方式来实现。。同时要考虑下载和传送速度不同的问题,中继服务器暂存空间满了,要自动暂停下载。
    下载引擎想用 aria2 ,能不能用并不清楚,正在翻文档。。

    我试着谷歌现有的解决方案,然而并找不到(是我找的姿势不对?)
    所以只好自己上手写了,,试着学新东西,顺便解决痒点
    哦,我目前只做嵌入式和 win 桌面程序,,还没尝试过网络相关的;)
    还请大家指教!

    题外话:
    海外党也会怀念国内的网络环境的.. //想下东西的时候#.#
    16 条回复    2016-05-18 16:15:49 +08:00
    Tiande
        1
    Tiande  
    PRO
       2016-05-16 04:43:10 +08:00
    curl 命令就有分段下载,
    下完每个小段再传回本地合并就行了。

    另外还是不要用盗版的好,毕竟这在本社区是不正确的行为。
    binux
        2
    binux  
       2016-05-16 04:46:59 +08:00
    本地分段+代理中继
    msg7086
        3
    msg7086  
       2016-05-16 05:59:36 +08:00
    花 2 美分开个 vultr 中转。
    aprikyblue
        4
    aprikyblue  
       2016-05-16 06:16:35 +08:00 via Android
    Range ?
    XhstormR
        5
    XhstormR  
       2016-05-16 08:03:01 +08:00 via Android
    有这种实现方法吗?
    希望可以用在局域网中,多台电脑一起下载,然后传给主机,达到加速目的。
    dixyes
        6
    dixyes  
       2016-05-16 08:16:15 +08:00 via Android
    curl xx |split ?一堆 shell 完成
    dixyes
        7
    dixyes  
       2016-05-16 08:22:37 +08:00 via Android
    然后 cat some.splited.file |nc ip port &&rm -f some.splited.file
    imn1
        8
    imn1  
       2016-05-16 10:47:56 +08:00
    wget/aria2c/curl 都有添加 header 功能,里面用 range 就可以了,前提是服务器那边支持多线程(断点续传)
    starqoq
        9
    starqoq  
       2016-05-17 02:58:46 +08:00 via Android
    为什么不在 vps 上开一个 http 代理。
    x1155665
        10
    x1155665  
    OP
       2016-05-17 16:12:05 +08:00
    @Tiande
    @dixyes
    curl 可以是可以,但是不能多线程。。
    x1155665
        11
    x1155665  
    OP
       2016-05-17 16:14:34 +08:00
    @imn1
    header 里面下加 range ?看来要翻翻网络的文档了。学过就忘了。。
    x1155665
        12
    x1155665  
    OP
       2016-05-17 16:17:23 +08:00
    @starqoq 试过在本地把 ss 做成 http 代理,然而中途会断线,另外 aria2 只能单线程下载
    dixyes
        13
    dixyes  
       2016-05-17 17:32:25 +08:00 via Android
    http 的玩意咯 -H "Range: bytes
    =0-233"啥的
    ericFork
        14
    ericFork  
       2016-05-18 02:01:23 +08:00
    回归原始需求,你要下载的内容是什么?有没有可能就近下载?
    starqoq
        15
    starqoq  
       2016-05-18 07:12:59 +08:00
    @x1155665 不是的。那样比较容易被 GFW 特征检测,然后就掉线了。
    比较妥当的方法是用 squid 在服务器本地(监听服务器的 127.0.0.1 : 3128 )搭建一个服务器。然后用 SSH 映射到本地(将服务器的 127.0.0.1:3128 映射到本地的 8080 )。这的方案也能在 OpenWrt 上完成,映射到 192.168.1.1 上就能在路由器上用。

    另外如果你确实需要的话,我其实写过一个类似的东西,把 Mega.nz 上的东西转为 HTTP 下载。 Mega.nz 是点对点加密的,浏览器先下载到缓存里然后解密的。我的代码作为一个 HTTP 服务器,当收到 Get 请求的时候,一边从 Mega 下载,一边解密,然后转发给 HTTP 客户端。

    多段下载主要是解析 HTTP 头里的 range 部分信息。

    https://github.com/yuzeming/python-megadl

    希望能对你有帮助。
    x1155665
        16
    x1155665  
    OP
       2016-05-18 16:15:49 +08:00
    @ericFork 主要是想找个理由让自己学点新东西;)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4550 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:01 PVG 18:01 LAX 03:01 JFK 06:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86