萌新求教 : 如何缓存请求然后批量处理?
发布于 8 年前 作者 Eeylx 3879 次浏览 来自 问答

最近实验室在做nodejs的项目, 聊天功能用的是 环信 , 但是环信的请求是有限流的 详见: http://docs.easemob.com/im/450errorcode/45restastrict 我们现在的流程是每收到一个请求就去调用环信api作相应的处理, 想改成批量处理, 比如攒一秒钟, 每秒钟调用一次环信的批量处理api 我现在不太明白如何在一秒钟内暂存所有请求, 然后每秒钟处理一次? 搜了一些资料都没太明白具体要怎么做QAQ

7 回复

收到请求就push到一个数组里,一秒后调用,清空数组,这样可以吗

与楼上同义,可以把请求放进redis之类的缓存数据库,然后同时通过定时任务来每秒处理缓存里所存储的请求,达到充分解耦

@wlpeter 但问题是对于每个请求我还要在成功或者失败之后返回一个结果, 如果放进数据库的话, 批量处理完之后要如何给前端返回结果呢?

@Eeylx 一般做批量处理是不会考虑直接返回结果,如果一定要这么做的话,你可以考虑下结合时间戳或唯一性的字符串来使用redis的发布订阅功能或者在批量处理后在缓存中存储批量处理后的结果(即成功或失败),具体我没实践过,只是小建议,还是建议如果做了批量处理就不要直接返回了

@wlpeter 注册之类的请求是手机app发过来的, 总得告诉用户注册成功还是失败了吧… 信息肯定是要返回的, 然而环信有api限流还必须得做批量处理, 不然用户多了就会操作失败

@Eeylx 注册功能怎么可能会做批量啊。。。

@wlpeter 环信接口限流说明 : http://docs.easemob.com/im/450errorcode/45restastrict 其中不光注册, 光是IM用户相关这一项的 “单个或批量注册、获取和删除用户;重置用户密码;修改用户信息;查看用户在线状态” 这些就都算在10次/秒 里面, 然而这些操作都需要给app返回结果啊…

回到顶部