pushplus 发送消息延迟收到原因说明
pushplus发送消息是异步处理+消息队列,另外有的发送渠道(短信、语音等)本身也不支持同步。
异步处理
并不是请求接口就立马返回发送结果,请求接口后返回的是一个流水号,需要根据流水号再查询最终的发送结果。这也是为什么在试一试页面中,除了发送消息按钮以为还有一个“发送结果查询”区域的原因。
采用异步处理方案的原因:
- 几十万的用户,且单一用户每日成百上千次数的免费请求;
- 境内外黑客团队的恶意脚本扫描、攻击请求;
- 用户部署的第三方脚本、程序的海量错误请求。
所以在已投入多台较高成本的服务器情况下,依然承受着非常大的压力。如果依然采用同步处理方案,会导致接口响应速度也变慢了,请求消息出现无规律的莫名丢失。为了让接口能够实现更大的吞吐量,避免出现请求失败,发送消息采用了异步机制。保障了虽然消息可能慢但至少不会丢。
消息队列机制
发送消息后会消息会进行排队处理,特别是整点的时候,很多人写的定时任务会选择整点时候来执行,从而导致瞬时有大量请求,所以排队的队伍会比较长。导致接收消息会有延迟的情况。另外发送一对多消息的时候,单一群组内的用户有多个,也是排队一个个发送的。
实名用户和会员用户有两个不同的队列,介于存在大量非会员用户,所以出现消息延迟属于正常情况。会员用户有专属的消息队列,且处理消息速度也远大于实名用户的队列,所以消息延迟会大幅降低。
同时为了避免瞬时有大量的请求导致队列中都是某一个用户的消息,导致其他用户的消息一直收不到,pushplus接口也限制了接口请求的频率,具体查看“额度说明”。