今天代码在审核注册用户通过时,发送会员短信。发现系统页面卡死了。这就是php同步执行造成的。网上找找发现有几做法。什么队列,workman,curl之类的。 分析了一下。workman太大,队列太麻烦,就一个短信功能使用它不划算了。后面分析了curl,一般是curl传post或get数据到一个链接地址。但是我担心使用域名的地址响应太慢。忽然想到使用php内置的server。这样curl访问127.0.0.1很快了。这个功能可以使用在非队列的异步环境中,如:邮件,短信,通知等`
//异步发送短信 function AsynSendSMS($phone,$sms_cn) {
//初始化
$curl = curl_init();
//设置抓取的url
$url = 'http://127.0.0.1:8080/index.php/Index/sendsms';
curl_setopt($curl, CURLOPT_URL,$url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 1);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//设置post数据
$post_data = array(
"phone" => $phone,
"sms_cn" => $sms_cn,
);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//var_dump(__LINE__,$post_data,$data);
}
` liunx环境:
[root@H1822279819623 ~]# php -S 127.0.0.1:8080 -t /home/wwwroot/bthink3/cli_server >/dev/null 2>&1 &
PHP 5.6.39 Development Server started at Fri Feb 22 17:23:28 2019
Document root is /bfsdata/wwwroot/bfsforexthink3/cli_server Press Ctrl-C to quit.
[Fri Feb 22 17:23:34 2019] 127.0.0.1:52352 [200]: /index.php/Index/sendsms
==成功。
注:cli_server是我的thinkphp的目录。