之前的我都是用 fsockopen 方式进行推送,虽然这种方式会比 curl 快,但是还是太慢了,测试发现1000个用户的模板消息需要3分钟,太漫长了,如果我推送10万或者更多用户,我得推送好几个小时,这个不科学,于是想着用golang或者swoole,后来想了想还是用swoole,golang还得配置环境,而服务器上的php环境是配置好的,他的协程也挺好用的,还是php写代码的格式;以下代码,3000条3秒左右可以推送完成,还可以优化代码,我这边能用就先将就用了。
- swoole 的推送代码:
<?php
// 假设该服务在IP 123.12.12.43 上
// 启动命令,在文件目录执行 php push.php
echo 'start_at: '. date('Y-m-d H:i:s') ."\r\n";
// 开启http服务,用于接收推送数据
$serv = new Swoole\Http\Server("0.0.0.0", 8080, SWOOLE_BASE);
$serv->on('request', function ($req, $resp) {
// 获取请求过来的参数列表
$params = array_merge($req->get ?: [], $req->post ?: []);
$params['func'] = isset($params['func']) ? $params['func'] : '';
$wg = new \Swoole\Coroutine\WaitGroup();
$result = []; // 结果信息
$result['start_at'] = microtime(true); // 记录开始时间
$result['num'] = 0; // 记录推送数量
switch ($params['func']) {
case 'wx_push':
// 数据验证
if (!isset($params['openids']) || !$params['openids']