
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 服务器端不保留用户信息吗? |