要限制同一个客户端的请求数量,可以使用 `koa-ratelimit` 插件。该插件可以按照一定的速率限制客户端的请求数量。以下是使用 `koa-ratelimit` 的示例代码: ```javascript const Koa = require('koa'); const ratelimit = require('koa-ratelimit'); const app = new Koa(); app.use(ratelimit({ driver: 'memory', // 存储限流数据的驱动,这里使用内存驱动 db: new Map(), // 存储被限制的客户端信息的数据结构 duration: 60000, // 时间窗口,单位毫秒 max: 10, // 时间窗口内允许的最大请求数量 id: ctx => ctx.ip, // 提取每个请求的唯一标识符,默认使用请求的 IP 地址 })); // 添加其他中间件和路由 app.listen(3000, () => { console.log('Server started on http://localhost:3000'); }); ``` 在上述代码中,我们使用 `koa-ratelimit` 插件来限制同一个客户端的请求数量。插件配置中的关键参数如下: - `driver`:存储限流数据的驱动,可以选择内存 (`memory`)、Redis (`redis`)、MongoDB (`mongodb`) 等。在示例中我们使用内存驱动。 - `db`:存储被限制的客户端信息的数据结构,这里我们使用 `Map`。 - `duration`:时间窗口的持续时间,单位为毫秒。 - `max`:时间窗口内允许的最大请求数量。 - `id`:提取每个请求的唯一标识符,默认使用请求的 IP 地址。 当某个客户端超过设定的最大请求数量时,该插件会返回 HTTP 状态码 429 Too Many Requests,并且设置 `Retry-After` 头部,表示重新尝试请求的时间。 通过使用 `koa-ratelimit` 插件,可以有效地限制同一个客户端的请求数量,从而保护服务器免受过多的请求负载。同时,你也可以根据实际需求调整时间窗口和最大请求数量的配置。