<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    stone2083

    資源如何避免多線程下載

    今天在一次會(huì)議中,有朋友問(wèn)我,如何避免資源被迅雷等工具多線程下載?

    確實(shí),一些中小企業(yè)站點(diǎn),尤其是個(gè)人站點(diǎn),由于沒有過(guò)多資金,服務(wù)器承受不了大的壓力,站點(diǎn)提供的資源,一旦被迅雷等多線程工具下載,
    對(duì)服務(wù)器的壓力還是蠻客觀的。

    那么有什么辦法避免多線程下載呢?其實(shí)最簡(jiǎn)單的辦法,就是服務(wù)端根本就不要提供Content-Length值。試想一下,如果多線程下載工具得不到文件總大小值,如何分配去分配每個(gè)線程需要下載的量呢?不得已,只能通過(guò)單線程下載了。

    以http下載為例,我寫了一個(gè)提供下載的servlet,由于不返回Content-Length值(只返回了ContentType值),這個(gè)serlvet返回的流,只能單線程下載。
    public class Download extends HttpServlet {

        
    private static final long   serialVersionUID = 8401962046132204450L;

        
    private static final String FILE_PATH        = "/home/jones/tmp/sample.zip";

        @Override
        
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType(
    "application/octet-stream");

            OutputStream out 
    = resp.getOutputStream();

            FileInputStream in 
    = new FileInputStream(FILE_PATH);
            
    int readLength = 0;
            
    byte[] cache = new byte[1024];
            
    while ((readLength = in.read(cache)) != -1) {
                out.write(cache, 
    0, readLength);
            }
            in.close();

            out.flush();
            out.close();
        }
    }

    同樣的道理,只要配置服務(wù)器不要返回Content-Length值,那么就可以有效避免多線程下載了。

    posted on 2008-03-17 21:58 stone2083 閱讀(886) 評(píng)論(2)  編輯  收藏 所屬分類: misc

    Feedback

    # re: 資源如何避免多線程下載[未登錄] 2008-07-18 09:33 agapple

    如果所有的下載請(qǐng)求都經(jīng)過(guò)servlet讀入與寫入,大量的下載請(qǐng)求會(huì)壓垮服務(wù)器
    我記得在javaeye看過(guò)robbin的一片文章,將下載文件直接推給網(wǎng)卡buffer,讓操作系統(tǒng)負(fù)責(zé)處理下載請(qǐng)求, 比如lighttd的X-sendfile
      回復(fù)  更多評(píng)論   

    # re: 資源如何避免多線程下載 2008-07-18 20:39 stone2083

    文章的本意不是說(shuō)通過(guò)servlet,來(lái)控制文件的下載。
    而是站在協(xié)議的角度上,通過(guò)servlet的例子,來(lái)說(shuō)明,只要修改content-length的值,就能達(dá)到“只允許單線程下載資源“的目的。
    雖然,通過(guò)修改協(xié)議的規(guī)定,擅自修改http頭信息的方式的做法,不符合規(guī)范。但是對(duì)于小站點(diǎn)來(lái)說(shuō),是一個(gè)成本最小的方法。
    站點(diǎn)上的圖片等,都是資源,如果都允許多線程下載,那么用戶量一多,對(duì)于小網(wǎng)站來(lái)說(shuō),還是有點(diǎn)困難的。
    文章采用servlet,僅僅用于舉例說(shuō)明.真正的應(yīng)用上,可以通過(guò)修改apache,lighttpd,等web服務(wù)器的配置,來(lái)達(dá)到這個(gè)目的。

    如果是資源的下載,那么肯定通過(guò)更為專業(yè)的ftp server來(lái)對(duì)外服務(wù)。而不是采用http協(xié)議。當(dāng)然傳統(tǒng)的ftp server,也是有IO消耗的。

    至于樓上所說(shuō)的X-sendfile,我也看過(guò)javaeye的文章(http://robbin.javaeye.com/blog/154538)。X-sendfile,確實(shí)是一個(gè)很先進(jìn)的理念(至少我看來(lái)是,或許我是一個(gè)很老土的人)。
    但是自己對(duì)這個(gè)沒有任何嘗試,也沒有更多的評(píng)論資格。  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 亚洲精品国自产拍在线观看| 99re视频精品全部免费| av无码国产在线看免费网站| 久久亚洲综合色一区二区三区 | 特级毛片全部免费播放a一级| 毛片a级毛片免费播放下载| 国产精品亚洲午夜一区二区三区| 一级毛片在线观看免费| 亚洲第一网站免费视频| 成人免费无码视频在线网站| 美女黄色毛片免费看| 国产成人精品日本亚洲11| 97亚洲熟妇自偷自拍另类图片| 西西人体免费视频| 亚洲av最新在线网址| 一色屋成人免费精品网站 | 亚洲国产美女福利直播秀一区二区 | 97在线免费视频| 特级毛片免费观看视频| 亚洲香蕉久久一区二区| 久久久久久亚洲精品成人| 亚洲成色在线综合网站| 国产l精品国产亚洲区在线观看| 亚洲日本中文字幕一区二区三区| 日本免费大黄在线观看| a级午夜毛片免费一区二区| 亚洲精品视频免费观看| 亚洲国产精品自在线一区二区| 插B内射18免费视频| 男女超爽刺激视频免费播放| 亚洲啪啪免费视频| 色窝窝亚洲AV网在线观看| 怡红院亚洲怡红院首页| 啦啦啦完整版免费视频在线观看| 理论亚洲区美一区二区三区| 亚洲人成色77777在线观看| 在线日韩日本国产亚洲| 国产亚洲AV手机在线观看| 久久夜色精品国产亚洲av| 天天摸天天操免费播放小视频| 久久精品成人免费国产片小草|