zoukankan      html  css  js  c++  java
  • 浏览器发送总共下载文件2第二个请求,如何“下载”仅仅记录1次要?

    近期,个人官网实现了PDF下载功能,出于统计的考虑。添加了“下载次数”download_count这个字段。



         可是。我今天突然发现。每次下载download_count都直接+2了。假设server发生这样的事,另一定的可能,本地就我一个人下载,怎么可能下载2次。

    于是,打开了log4j的debug模式。果然运行了2次更新请求。

        

    @RequestMapping(value = "/download/pdf")
    
    public void downloadPdf(@RequestParam Integer id, HttpServletRequest req,
    
    HttpServletResponse res) {
    
    Map<String, Object> article = articleService.get(id);
    
    PdfDownload.doDownloadPdfPostWithShuiyin(req, res, article);
                    articleService.plusDownloadCount(id);  
        }



      于是,想通过ThreadLocal<Integer> local;这样的方式去记录。假设local中有值,表明当前线程已经下载过了,不须要再次更新下载次数。

       但事实证明,上述做法不对,实际现象是次数添加不够“稳定”,有时+1。有时+2。

    后来,我又把local中的值。存放ip,推断是否为null,或者2次请求ip是否同样。结果仍然不够“稳定”。
    --------------------------------------------------------
    在实践过程中,我的一些“误解”
    1.下载文件,浏览器仅仅会发送1次请求。实际是2次,毫无疑问。
    2.发送2次请求,是同一个线程响应。我想当然的觉得这2次请求,都是服务于“同一次下载”。
      事实证明,我太天真。
    3.因为觉得这2次请求。我觉得使用ThreadLocal存放个值,表明当前线程已经下载过了。
      事实证明。这不科学。

    2次请求。2个不同的线程响应。
    4.“2次请求,2个不同的线程响应。

    ”理论上是这样。
       但我们Team在做公司项目的时候,遇到了相似的问题。Boss后来想起来,Tomcat的线程是用“线程池” 实现的。


       多次请求可能是同一个线程处理,也可能是多个。 
      这一点。和实际发生的“更新次数不稳定” 很吻合。
    5.下载文章A,次数更新。

    下载文章B、C、D,次数都不再更新。
      这个不符合我的设想,原因是:下载没有比較文章的ID,不同文章的下载次数应该是相互独立的。 

    --------------------------------------------------------
    如今有2个问题:
    1.我就想实现自己最初的想法。


       浏览器发送2次请求,下载次数更新了2次。能不能仅仅让它更新一次了。从而准确地体现下载次数!!。
      这个我眼下还没有想到好的方法。

    2. 改变需求,一个用户在一定时期内,下载一篇文章,不管多少次。都仅仅算一次。


      下载不同的文章,次数应该且仅仅应该添加1次。

      我的想法:
      建立一个存放已经下载的队列,用户的ip和文章的id共同作为key。
      用户下载一次,就把用户IP和文章ID 共同组成的key,存放到队列里。
      当来了新的下载请求时。从队列中查找,是否已经存在key。假设不存在。才+1.否则。不更新次数。


    原文首发:http://fansunion.cn/article/detail/141.html

  • 相关阅读:
    Stop介绍
    django建站基本步骤
    Js 数组排序函数sort()
    前端面试基础-html篇之CSS3新特性
    前端面试基础-html篇之H5新特性
    2018年前端程序猿最好用的编辑器:visual studio code 常见配置
    适合手机端页面的轮播图,无插件,支持自动循环,一套轮播图可以适应所有的屏幕
    纯css3实现圆点围绕圆圈匀速无限旋转
    xpath 踩坑笔记01 通过a 文本内容标签定位元素
    python3学习记录3
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4573430.html
Copyright © 2011-2022 走看看