• openrstry 限流 是否有清零逻辑 连接池


    openrstry  限流  是否有清零逻辑

     https://github.com/openresty/lua-resty-limit-traffic

    # encoding=utf-8
    # Shawn 2020/4/28 10:31
    from asgiref.sync import async_to_sync
    
    
    class ABCBucketToken:
        def __init__(self):
            pass
    
        def connect_bucket(self):
            pass
    
        def refresh_token(self):
            pass
    
        def check_token(self):
            pass
    
        def disconnect_bucket(self):
            pass
    
        def __del__(self):
            pass
    
    
    class BizBucketToken(ABCBucketToken):
        factory_req_id = lambda k: 'BizBucketToken.' + k
        class_var_bucket_created = False
    
        def __init__(self, req_id='anonymoususer', limit=16, window_second=32):
            self.req_id = BizBucketToken.factory_req_id(req_id)
            self.limit = limit
            self.window_second = window_second
            # TODO
            self.connect_bucket()
        @classmethod
        def connect_bucket(cls):
            if cls.class_var_bucket_created:
                return
            # TODO cnf
            # TODO check alive
            def get_redis_conf():
                return 'redis://:pwd@rcs.com:6379/2'
    
            async def create_redis_pool(i: str):
                import aioredis
                pool = await aioredis.create_redis_pool(i)
                return pool
    
            redis_conf = get_redis_conf()
            redis_pool = async_to_sync(create_redis_pool)(redis_conf)
            cls.bucket = redis_pool
            cls.class_var_bucket_created=True
        def handle_token(self):
            to_throttle = False
            pttl = async_to_sync(self.bucket.pttl)(self.req_id)
            if pttl == -2:
                async_to_sync(self.bucket.set)(self.req_id, self.limit)
                async_to_sync(self.bucket.pexpire)(self.req_id, self.window_second * 1000)
            elif pttl == -1:
                async_to_sync(self.bucket.pexpire)(self.req_id, self.window_second * 1000)
            elif pttl == 0:
                # TODO
                pass
            elif pttl > 0:
                r = async_to_sync(self.bucket.get)(self.req_id)
                r = int(r)
                if r >= 1:
                    async_to_sync(self.bucket.set)(self.req_id, r - 1)
                else:
                    to_throttle = True
            return to_throttle
    
        def disconnect_bucket(self):
            pass
    
        def __del__(self):
            pass
    
    
    if __name__ == 'main':
        pass
    

      

    连接池

    uid = get_uid(request)
    BizBucketToken.connect_bucket()
    r = BizBucketToken(req_id=uid, limit=160, window_second=32)
    to_throttle = r.handle_token()




  • 相关阅读:
    lufylegend:图形变形3
    javascript: Math.sin() cos() 用法
    lufylegend:图形变形2
    lufylegend:图形变形1
    lufylegend:图片的加载和显示
    lufylegend基础知识1
    canvas使用3
    canvas使用2
    canvas使用1
    javascript:addEventListener
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10957446.html
Copyright © 2020-2023  润新知