java servlet写的接口程序,需要对每个用户进行并发数限制,这个怎么实现,具体代码怎么写

解决方案 »

  1.   

    用户通过http访问servlet,servlet接受到请求,调用接口,返回json数据
      

  2.   

    直接求代码的,恐怕基本都没人给。三个前提假设:
    1)如果所需要的场景,并没有很高的并发压力要求;
    2)用户是有身份的,或者说是需要登录的;
    3)服务器是单节点的。可以直接在 ServletFilter 里面,对Session对象设置计数器,进入Filter的时候增加计数器,结束Filter的时候减少计数器。如果计数器高于一定值,就直接拒绝请求。
      

  3.   

    别纠结,限流是个大工程,直接用框架吧,不是那么简单的事情
    Sentinel根据参数限流
    https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81如果要自己做,就写个令牌桶
    https://www.cnblogs.com/googlemeoften/p/6020718.html
      

  4.   


    该用户当前并发访问量,因为ServletFilter是包装(这个词用的不准)在真正被执行的 JSP 或 Servlet 之外的。你看下Servlet的例子就知道了。
      

  5.   


    考虑到你又提了几个概念:
    1)当前用户量(登录用户数);
    —— 这个一般来说用SessionListener来做计数器,不那么精确的记录目前仍在会话有效期中的登录用户数。
    2)当前并发访问量;
    —— 这个一般用Web前置服务器来控制比较合适,非要用中间件的话,就是控制线程数之类。
    3)当前用户并发量;
    —— 说实话这个控制的比较少,一般都是改为针对 IP 来控制并发访问量,那么就还是用Web前置机。
    —— 不过既然你喜欢研究,那么招数就是ServletFilter来进行控制,策略就是请求开始时记录该用户有一次请求中,请求结束时删减该请求次数。
    4)当前用户登录量。
    —— 这个是避免某用户反复登录,开N个窗口登录之类的行为,一般来说是通过SessionListener和ServletFilter配合来处理。