开发项目上有个短信发送的问题,
客户端提交到 /sms.php的请求 然后sms.php在curl post到sms运营商那儿去,
虽然少量没问题 但是高并发(某时间段)的话有可能同一时间几百个人请求,那么服务器也要在同一时间curl post几千个请求到运营商那儿去 高带宽还行 稍微低点就会照成很多请求失败,
因为队列用不来 研究了很久 把任务装进redis里面 然后通过 php cli来循环读取然后挨个发送 感觉php cli不靠谱 再则挨个挨个发 岂不是有时候有的短信要等很久才会收到
就是再次问问各位大神 有什么好的办法解决
环境php 5.6 apache windows 2008(linux不熟悉 之前做。net开发的 所以大部分都是用的win平台)
谢谢了各位前辈
首先要查看一下运营商那同时并发能有多少,这样它就是你的一个最大值
然后队列中就可以设置多个消费者client来从队列中拿消息,然后发送短信。
逐步调整消费者client的个数来测试达到的最大性能值。
还是要有些“硬资源”作保障的,你说带宽不行,处理能力不够,单靠“软”的方法,就想做到没有延迟、没有失败请求,有点无米之炊啊!
唯一可以优化的地方就是:
运营商那边如果有批量接口,可以合并多个请求组包一次性发过去。
楼上正解,你现在采用的是多线程for循环,可以在消费端用线程池处理