Ruby 关于发送短信的问题

millim · 2015年12月14日 · 最后由 yggc2018 回复于 2018年05月18日 · 3014 次阅读

先说一下大致需求,调用一个短信平台,然后自己有个群发的功能,但是群发到每一个用户的内容是不一样的,所以只能每个用户逐条发送,再然后短发平台要求连续发的时候必须每隔两秒发送一条短信,所以 30 个手机号的话,就需要 30*2 =60s 的时间去发。

本人不才,想通过队列任务的形式把发送短信的东西丢到后台任务去,目前采用的 backburner,但是遇到问题 (也可能是小的处理方式就没对

比如,当发送一个 A 任务的时候 (A 中有电话 N 条),那么 N 条短信的发送时间就应该是 N*2,这个时候 B 任务来了 (B 有电话 M 条),那么我现在的处理方式是获取 A 任务最后一条的时间 max(N)*2,然后 B 的 M 条短信的发送时间就是 max(N)*2 + M*2,但是总感觉有什么不对。

所以想问问各位大哥有没有什么好的解决办法,最好是有没有什么时间任务队列一类的东西

解决办法不应该是找短信平台查找群发的为什么用户收到的是不一样的内容么?

#1 楼 @hging 不是群发,实质就是一个用户一条短信,因为每个用户有个唯一的编码,然后我要排队去发这些东西

#2 楼 @millim 那这样的话我觉得应该去处理这个每隔两秒发送一条短信的机制。因为这样的限制满足不了你的需求

某短信平台貌似可以达到 600 条/秒

是这样的:短信平台会有一个群发接口,你需要把参数列表单独传过去比如 "你好##username##" 然后传一下数据文件 张三,李四,王五

换个有能力(背景)的短信服务商,然后跟对方签服务合同,付钱,然后让对方的技术提供支持。

云片还不错

#7 楼 @moioo 一般来讲 api 都是有个频率限制,但是云片牛逼在于居然不限频率,鼓励多线程 https://www.yunpian.com/start/faq.html#faq4

把参数拼写成文件,然后用个测试工具发出去,强大的工具能还记录一下结果

sidekiq + sidekiq-limit_fetch,用一个线程去发请求,加个 sleep 1 就差不多了

可以试试看使用我们提供的短信服务 https://www.yunpian.com/

可以试用下我们的短信语音服务:http://www.sendcloud.net/sms.html

您好,我是在别的招聘贴看到您最近找工作,坐标成都天府广场那边,有意可以加我 qq1837241013(微信同)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号