PHP异步实现
来源:互联网 发布:手机怎么注册开淘宝店 编辑:程序博客网 时间:2024/06/06 07:15
最近由于工作的需要,也在用PHP做一些异步的功能。我面临需求:根据查询条件不同生成Hadoop执行sql(用PHP),用thrift做跨语言通信功能,用Hadoop计算数据生成文件,最后用PHP发邮件。
PHP异步或模拟异步可用方法
- curl
- fsockopen
- popen
curl
curl 本身没有异步功能,是阻塞模式运行,只是我们可以通过设置一个等待时间来 控制请求的响应速度。即设置CURLOPT_TIMEOUT(0为无限等待)。
使用curl异步访问:$ch = curl_init(); $data = [ 'sql' =>1, 'where'=>2 ]; curl_setopt($ch, CURLOPT_URL, "http://ci.dev/index.php/welcome/sync1?sql=123"); //设置头文件的信息作为数据流输出 curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_TIMEOUT,1); curl_setopt($ch, CURLOPT_POST,TRUE);//TRUE 时会发送 POST 请求 //设置post数据 curl_setopt($ch, CURLOPT_POSTFIELDS,$data);// //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //执行命令 curl_exec($ch); //关闭句柄 curl_close($ch);
fsockopen
fsockopen 与 curl 本身没什么区别,最大不同fsockopen 要自己拼接头。默认情况下将以阻塞模式开启套接字连接。当然你可以通过stream_set_blocking()将它转换到非阻塞模式。
注意:记得在我测试的时候,一直测试不成功,原来是请求头 与 响应数据 有个空行(回车+换行)
使用fsocketopen()异步:public function syncbySocket(){ $len = strlen('123'); $host= "www.ci.dev"; $path='/index.php/welcome/syncwrite'; $fp = fsockopen($host, 80, $errno, $errstr, 1);//最后一个是连接超时 if($fp){ $header = "POST $path HTTP/1.1\r\n"; $header .= "Host: $host\r\n"; $header .= "Content-type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: $len\r\n"; $header .= "Connection: close\r\n\r\n";//注意是双斜杠 fwrite($fp,$header); /*while (!feof($fp)) { echo fgets($fp, 1024); }*/ fclose($fp); echo 'ok'; }else{ echo $errstr; } }
popen
本质打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。 但运行代码还是会 等待数据返回 在向下执行。
由于运行的是一个命令,在Linux中 在命令后面 加 & 就表示把进程放到后台运行,如果我们需要运行的结果我们可 通过 数据流重定向 获取。
pclose(popen("/home/work/php/bin/php /home/work/index.php Pollpayment_order pull >> /home/work/tmp/errorlog &", "r"));注意下面执行还是阻塞模式pclose(popen("/home/work/php/bin/php /home/work/index.php Pollpayment_order pull >> /home/work/tmp/errorlog", "r"));
阅读全文
0 0
- php实现异步操作
- php实现异步处理
- PHP异步实现
- php 服务器端实现异步请求
- PHP实现异步调用方法
- PHP异步调用实现方式
- php fsockopen实现异步请求
- php 异步websocket客户端实现
- PHP实现异步调用方法研究
- 使用fscok实现异步调用PHP
- PHP curl实现异步的http请求
- PHP+AJAX实现文件异步上传(一)
- PHP异步调用socket实现代码
- 关于PHP实现异步操作的研究
- PHP实现异步调用方法研究
- 使用fscok实现异步调用PHP
- PHP实现异步调用方法研究
- 使用fsockopen()实现异步调用PHP
- java的三大特性之多态
- 把Rust和Servo引入Firefox
- C++求解近似比例(比例的压缩)
- leetCode-Maximum Length of Repeated Subarray
- python 注意事项
- PHP异步实现
- 160
- HTML5--为div设置常用属性
- 数据库的几种索引
- CSS 文本
- fastdfs存储小文件的可行性分析
- mysql基础知识
- 闭包是什么?
- 如何将PPT导出为60帧的视频