php多进程用在哪里,php如何进行多进程与异步调用方法

浏览器和服务器之间只一种面向无连接的HTTP协议进行通讯的,面向无连接的程序的特点是客户端请求服务端,服务端根据请求输出相应的程序,不能保持持久连接。

这样就出现了一个问题,一个客户端的相应服务端可能执行1秒也有可能执行1分钟,这样浏览器就会一直处于等待状态,如果程序执行缓慢,用户可能就没耐心关掉了浏览器。

而有的时候我们不需要关心程序执行的结果,没有必要这样浪费时间和耐心等待,那我们就要想出办法让程序不收等待在后台静默执行。

根据个人的总结,总结了如下方法:

1.客户端页面采用AJAX技术请求服务器

大多用于提升用户的体验而弄。

2 利用linux多进程与php函数相结合

利用php的popen函数打开进程文件指针,配合linux命令,打开的多进程趋于稳定。

$cmd = "cd /dir/代码目录;php index.php method >>".$log_file."&";

// linux命令 ,建议把执行结果输出于日志

for($i = 1; $i <= $thisPlantaskConfig['thread']; $i++)  //用参数thread控制开启的进程数

{

pclose(popen($cmd, "w"));  //打开进程

usleep(mt_rand(100,500));  //间隔打开

}

这样子开启的多进程模式会存在某些缺陷,在后期的文章中会提及

3 远程请求的多进程

curl的多线程操作,创建批处理句柄,发出多请求,不用等待上个请求是否成功

$ch1 =curl_init();

$ch2=curl_init();//设置URL和相应的选项

curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");

curl_setopt($ch1, CURLOPT_HEADER,0);

curl_setopt($ch2, CURLOPT_URL,"http://www.php.net/");

curl_setopt($ch2, CURLOPT_HEADER,0);//创建批处理cURL句柄

$mh =curl_multi_init();//增加2个句柄

curl_multi_add_handle($mh,$ch1);

curl_multi_add_handle($mh,$ch2);

$active= null;//执行批处理句柄

do{

$mrc=curl_multi_exec($mh, $active);

}while ($mrc ==CURLM_CALL_MULTI_PERFORM);while ($active && $mrc ==CURLM_OK) {if (curl_multi_select($mh) != -1) {do{

$mrc=curl_multi_exec($mh, $active);

}while ($mrc ==CURLM_CALL_MULTI_PERFORM);

}

}//关闭全部句柄

curl_multi_remove_handle($mh, $ch1);

curl_multi_remove_handle($mh, $ch2);

curl_multi_close($mh);?>

4 使用某些扩展

利用某些通信扩展,例如php-process

当然,我个人不建议使用这个。

5 利用开源项目

善于利用前辈的经验,站在巨人的肩膀上。

swoole 和 workerman 是我个人认为非常过优秀的异步,并行,高性能的网络通信框架,值得学习

内容来源于网络如有侵权请私信删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值