Publish: December 25, 2014
Category: 生活
No Comments
$cmd = 'curl --form file=@/home/www/default/test/aa1.jpg --form name='.time().'.jpg http://www.xxxx.net/test/upload.php > /dev/null 2>&1 &';
exec($cmd);
我们可以通过exec 操作curl工具来发出请求。curl请求才可以做为独立进程一部分来完成,允许php代码继续执行,而不会阻塞socket连接。
这种方法的性能介于前面两种方法之间,比soket方法快,比写文件的方法花费更少的系统资源。
操作 forkd curl 方法,最简单的例子如下:
//$cmd = 'curl --form file=@/home/www/default/test/aa1.jpg --form name='.time().'.jpg http://www.xxxx.net/test/upload.php > /dev/null 2>&1 &';
$cmd = 'curl --form '.$file.' --form '.$name.' '.$url.' > /dev/null 2>&1 &';
exec($cmd);
return true;
}
?>
如果运行在生产模式,我们不希望等着fork进程的消息输出。所以代码中加添了"> /dev/null 2>&1 &"让进程正确的执行 ,而把任何可能输出都丢弃掉。
同样功能的shell脚本如下:
curl --form file=@/home/www/default/test/aa1.jpg --form name='.time().'.jpg http://www.xxxx.net/test/upload.php > /dev/null 2>&1 &'
脚本花费了大概1秒多一点的时间,占用大约4k的的常驻内存。而curl进程用了 标准SSL 300毫秒完成请求,exce调用立刻相应php程序。这使得服务页面能很快相应用户。
笔者用一台一般水平的机器试验,这种方法curl可以每秒响应100个左右https请求,而没有任何的内存开销。如果不用SSL,响应的请求会更多。
不用等待输入,Fork一个进程非常快。
curl花费了和socket同样时间响应一个请求,但是这个外带的过程。
调用curl需要仅仅普通的unix基础。
Fork发起一个简单的请求,只需要几毫秒的时间,但是大量的同步调用(forks)会导致系统变慢。
Tags: none
Related Posts:
[尚无相关文章]