chatgpt-web icon indicating copy to clipboard operation
chatgpt-web copied to clipboard

feat:新增限流功能

Open zhuxindong opened this issue 1 year ago • 11 comments

feat:新增限流功能: 可选参数 - MAX_REQUEST_PERHOUR 每小时最大请求次数,可选,不填时默认36000次

zhuxindong avatar Mar 20 '23 07:03 zhuxindong

请问自定义api功能如何开启呢,看你的介绍里面有自定义,但是搭建后没找到

slwl avatar Mar 20 '23 07:03 slwl

请问自定义api功能如何开启呢,看你的介绍里面有自定义,但是搭建后没找到

因同一ip请求多个api可能导致较高的封号风险,故此feature未采纳

zhuxindong avatar Mar 20 '23 07:03 zhuxindong

这个是服务端总数量吗?

Chanzhaoyu avatar Mar 20 '23 08:03 Chanzhaoyu

这个是服务端总数量吗?

针对单个IP的

zhuxindong avatar Mar 20 '23 08:03 zhuxindong

动画演示:我将每小时的请求数限制到5,超出后就会返回429限流。 image

zhuxindong avatar Mar 20 '23 09:03 zhuxindong

未填写时可以修改为不限制吗?

yi-ge avatar Mar 20 '23 09:03 yi-ge

未填写时可以修改为不限制吗?

不开启时目前的默认值已经很大了(单个请求ip限制每小时请求3.6w次,相当于一秒10次)。如果觉得还不够大,可以调整limiter.ts里面的值

zhuxindong avatar Mar 20 '23 09:03 zhuxindong

未填写时可以修改为不限制吗?

不开启时目前的默认值已经很大了(单个请求ip限制每小时请求3.6w次,相当于一秒10次)。如果觉得还不够大,可以调整limiter.ts里面的值

再请教个问题状态码 429 可以自定义吗?因为如果添加这个功能,需要和现在的 OpwnAI 的状态码区分下。我电脑不在身边,我没法看 npm 上的文档。

Chanzhaoyu avatar Mar 20 '23 09:03 Chanzhaoyu

还有需要加个 number 类型的判断,现在只判断了变量是否存在,不过我来处理也可以

Chanzhaoyu avatar Mar 20 '23 09:03 Chanzhaoyu

未填写时可以修改为不限制吗?

不开启时目前的默认值已经很大了(单个请求ip限制每小时请求3.6w次,相当于一秒10次)。如果觉得还不够大,可以调整limiter.ts里面的值

再请教个问题状态码 429 可以自定义吗?因为如果添加这个功能,需要和现在的 OpwnAI 的状态码区分下。我电脑不在身边,我没法看 npm 上的文档。

目前框架默认就是429,业界通用的429就是请求速率受限。而且当达到请求速率上限时,并不会调用OpenAI接口 而是直接给前端返回了429状态码,可能需要前端做一下状态码的判断

zhuxindong avatar Mar 20 '23 10:03 zhuxindong

还有需要加个 number 类型的判断,现在只判断了变量是否存在,不过我来处理也可以

感谢~

zhuxindong avatar Mar 20 '23 10:03 zhuxindong

这个不错,期待合并进主分支.

tanpengsccd avatar Mar 21 '23 01:03 tanpengsccd

希望改为

const limiter = rateLimit({
  windowMs: 60 * 60 * 1000, // Maximum number of accesses within an hour
  max: maxCount,
  statusCode: 200, // 200 means success,but the message is  `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`
  message: async (req, res) => {
    res.send({ status: 'Fail', message: `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`, data: null })
  },
})

image

提示会更明确.

tanpengsccd avatar Mar 21 '23 15:03 tanpengsccd

希望改为

const limiter = rateLimit({
  windowMs: 60 * 60 * 1000, // Maximum number of accesses within an hour
  max: maxCount,
  statusCode: 200, // 200 means success,but the message is  `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`
  message: async (req, res) => {
    res.send({ status: 'Fail', message: `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`, data: null })
  },
})
image

提示会更明确.

其实感觉没有必要,根据安全性原则,接口的限流参数无需对客户端提示。提示了最大次数之后反而会更利于别人精确控制请求你接口的频率

zhuxindong avatar Mar 22 '23 00:03 zhuxindong