1
DT27 2016-01-27 09:01:55 +08:00
很奇怪在线聊天工具不记录发信时间。。。
|
2
JulyXing 2016-01-27 09:15:16 +08:00
我的思路是在数据表中通过发信时间来比较前后时间,如果防止别人恶意请求接口可以在服务器设置。
|
3
virusdefender 2016-01-27 09:31:45 +08:00
|
4
sherlocktheplant 2016-01-27 09:38:51 +08:00
根据 IP 和用户 ID 分别记录每次发送消息的时间
收到发送消息的请求时计算 1 分钟内发消息的次数 如果 IP 或者用户 id 任意一个键对应的次数超过 30 就返回发送失败 并要求验证码 然后同样的前端也做套频率限制 到了 30 就去取验证码 |
5
odirus 2016-01-27 09:45:14 +08:00
选择正确的工具,推荐 redis+lua 脚本实现, redis 中 expire + incr 都是现成的, lua 使用正确的话能够保证原子性操作。
|
6
sherlocktheplant 2016-01-27 09:47:18 +08:00
@odirus 对 这个用 redis 做很方便
不过如果服务规模不大 单台服务器的话 自己用个线程安全的 hashmap 也可以 部署比较省事 |
7
g5tf87 2016-01-27 10:21:28 +08:00
3 楼正解, 令牌桶算法是网络限流的经典算法,RFC 推荐.
|
8
vuuv 2016-01-27 20:33:58 +08:00 via Android
确保每秒钟只能发送一条消息即可。还可以简化数据库里的时间粒度。
|
9
firefox12 2016-01-27 23:07:34 +08:00 via iPhone
服务器端不保留用户信息吗?
|