差不多278条/秒,如果微信不限制的话,这个服务器配置我感觉可以做到的,一个是你可以用多线程发送,二十微信也支持同时发多个用户,类似于"touser" : "UserID1|UserID2|UserID3"
,这样下来效率就提高很多了
首先,需要先确定服务器是否有足够的 CPU 和内存来处理 50 万条消息。如果服务器性能不足,可能需要更换更强的服务器来满足需求。
其次,可以考虑优化推送程序的性能。有几种常见的优化方法:
批量处理消息,即一次处理多条消息。这可以减少消息处理所需的 I/O 操作和网络请求,提高性能。
使用多线程或多进程,即同时处理多个消息。这可以利用多核 CPU 的优势,提高性能。
使用缓存,即将消息先缓存到内存或磁盘中,然后再进行推送。这可以减少消息处理所需的网络请求和 I/O 操作,提高性能。
使用队列,即将消息放到一个队列中,然后再由后台线程或进程进行推送。这可以将推送过程异步化,提高性能。
总之,如果希望在 30 分钟之内给 50 万用户及时推送微信模板消息通知,可以考虑以上优化方法来提高性能。但是,还要确保服务器性能足够。如果服务器性能不足,需要更换更强的服务器来满足需求。
我使用了go+rabbitmq,完成了推送,主要踩了坑:
1.发送时的协程数要控制
2.你发送1条,微信会回调你一条,所以你1秒发1k条,你的nginx+php-fpm能不能支持1k的并发
3.还有你的带宽流量,发送的http包大小
如果用php的话,可以用swoole,不过思想是一样的,不如直接用go
用Guzzle开50个线程先看下效果。估计也干不完,你这个配置可能真的做不到,至少得搞个8核或者16核,这样nginx还能优化优化。
可以参考一下官方文档 guzzle-cn.readthedocs.io/zh_CN/lat...
use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
$client = new Client();
$requests = function ($total) {
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
for ($i = 0; $i < $total; $i++) {
yield new Request('GET', $uri);
}
};
$pool = new Pool($client, $requests(100), [
'concurrency' => 5,
'fulfilled' => function ($response, $index) {
// this is delivered each successful response
},
'rejected' => function ($reason, $index) {
// this is delivered each failed request
},
]);
// Initiate the transfers and create a promise
$promise = $pool->promise();
// Force the pool of requests to complete.
$promise->wait();
不知道大家有用过swoole 的异步任务吗,https://wiki.swoole.com/#/start/start_task?id=%e6%89%a7%e8%a1%8c%e5%bc%82%e6%ad%a5%e4%bb%bb%e5%8a%a1task 我现在就是用的这个,task_worker_num 开了 50个,现在一发服务器cpu就满了。
推荐文章: