该接口是 CPU 计算型任务,是异步到 Redis 给别的程序处理的,现在的问题是如果多次发请求马上断开链接的的话,会造成 redis 队列有很多任务,造成后方请求阻塞。现在的问题是不知道如何监听客户端主动断开链接。
Flask 和 Django 没找到相关的函数,tornado 重写了 on_connection_close
木有用啊……
1
mooyo 2020-03-21 18:12:53 +08:00
前端写个任务 ID,后端根据 ID 决定是否重放,这样能解决么。
|
2
mooyo 2020-03-21 18:14:29 +08:00
为啥你的前端会多次发起请求并马上断开链接呢
|
4
loading 2020-03-21 18:24:24 +08:00 via Android
无意间?前端没去抖吗?
|
5
xcstream 2020-03-21 19:00:12 +08:00
用 websocket 做 可以判断断开
|
6
mooyo 2020-03-21 19:03:39 +08:00
你用 HTTP,检测断开后删除,确定不会影响普通用户么。。上 WS 吧。。
|
7
hantsy 2020-03-21 19:06:02 +08:00
用 WebSocket
|
8
d5 2020-03-21 19:45:18 +08:00
个人觉得 restful 接口本来就是无状态的,何来断开一说呢。
简单一点可以设置各种限制,包括单个用户一小段时间同时执行的任务数量 用 WebSocket 是可以的 |
9
009694 2020-03-22 00:19:13 +08:00
不上 ws 的话 就每隔一段时间发一个心跳请求 超过几倍的心跳时间无情求的话就注销排队的任务
另外在任务提交到排队之前 应该先使用独立的 redis 缓存做任务去重 |