V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
x1155665
V2EX  ›  问与答

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

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

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

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

    题外话:
    海外党也会怀念国内的网络环境的.. //想下东西的时候#.#
    16 条回复    2016-05-18 16:15:49 +08:00
    Tiande
        1
    Tiande  
       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   ·   实用小工具   ·   5526 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.