关于高并发下的二次请求除了用队列还能用什么方式解决?

开发项目上有个短信发送的问题,
客户端提交到 /sms.php的请求 然后sms.php在curl post到sms运营商那儿去,
虽然少量没问题 但是高并发(某时间段)的话有可能同一时间几百个人请求,那么服务器也要在同一时间curl post几千个请求到运营商那儿去 高带宽还行 稍微低点就会照成很多请求失败,
因为队列用不来 研究了很久 把任务装进redis里面 然后通过 php cli来循环读取然后挨个发送 感觉php cli不靠谱 再则挨个挨个发 岂不是有时候有的短信要等很久才会收到

就是再次问问各位大神 有什么好的办法解决

环境php 5.6 apache windows 2008(linux不熟悉 之前做。net开发的 所以大部分都是用的win平台)

谢谢了各位前辈

3个回答

首先要查看一下运营商那同时并发能有多少,这样它就是你的一个最大值
然后队列中就可以设置多个消费者client来从队列中拿消息,然后发送短信。
逐步调整消费者client的个数来测试达到的最大性能值。

oyljerry
oyljerry 对,是的。受运营商控制
3 年多之前 回复
Mad_Geek
Mad_Geek 谢谢回答追问下:可不可以这样理解 例如运营商那边限制每秒接受100次,那么我可以开启多个任务执行,例如开启20个任务同时来读取队列消息然后同时发送 是不是这个意思
3 年多之前 回复

还是要有些“硬资源”作保障的,你说带宽不行,处理能力不够,单靠“软”的方法,就想做到没有延迟、没有失败请求,有点无米之炊啊!

唯一可以优化的地方就是:
运营商那边如果有批量接口,可以合并多个请求组包一次性发过去。

Mad_Geek
Mad_Geek 感谢 回答 小弟对这块确实模模糊糊的 别见笑 感谢指点
3 年多之前 回复

楼上正解,你现在采用的是多线程for循环,可以在消费端用线程池处理

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问