通过学习,让我们留下点什么,知其然,知其所以然。
综述,采用共享内存的方法,记录每个IP、QQ号的超时前的访问时间、次数,然后定时更新记录,从而达到控制。源代码在local_access_limit.h 与 local_access_limint.cpp的类LocalAccessLimit中。
内存数据图:
默认桶的数量:
DEFAULT_BUCKET_NUM = 999983, //至于这个数字具体怎么选定,我不清楚,请高人指点。我感觉的一个原则应该是比较大的素数,这样,在下面求模的时候可以减少碰撞。
DEFAULT_NODE_NUM = 1
/*!\brief node结构 */
typedef struct _NODE
{
int iKey; 节点主键
int iTimeStamp; 访问时间戳
int iAccess; 访问次数
} Node;
单个桶的大小、
_iBucketSize = sizeof(Node) * _iNodeNum;
Hash表的大小
_iHashTableSize = _iBucketSize *_iBucketNum;
具体流程:
1、创建文件(_sFilePath)目录,</