导航:首页 > 编程语言 > php异步

php异步

发布时间:2022-02-05 21:24:15

1. php中异步访问

这个推荐你用jquery来实现.
jquery的ajax实现中,直接有对json的处理.
=========
jquery的手册中的例子
=============
从 test.js 载入 JSON 数据,附加参数,显示 JSON 数据中一个 name 字段数据。

jQuery 代码:

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
alert("JSON Data: " + json.users[3].name);
});

2. php 延迟异步执行执行怎么做

用js,给b方法加个setTimeout()定时器,设定20秒后执行b方法即可,其他方法正常运行。

3. PHP怎样才能异步发送邮件

<?php
$domain="domain";
$url="/system_mail.php";
$par="email=".implode(',',$emailarr)."&........";
$header="POST$urlHTTP/1.0 ";
$header.="Content-Type:application/x-www-form-urlencoded ";
$header.="Content-Length:".strlen($par)." ";
$fp=@fsockopen($domain,80,$errno,$errstr,30);
fputs($fp,$header.$par);
fclose($fp);

echo''发送完毕';
?>

4. php 同步编程和异步编程的区别

传统的同步编程是一种请求响应模型,调用一个方法,等待其响应返回.

异步编程就是要重新考虑是否需要响应的问题,也就是缩小需要响应的地方。因为越快获得响应,就是越同步化,顺序化,事务化,性能差化。

异步编程通常是通过fire and forget方式实现,发射事件后即忘记,做别的事情了,无需立即等待刚才发射的响应结果了。(发射事件的地方称为生产者,而将在另外一个地方响应事件的处理者称为消费者).异步编程是一种事件驱动编程,需要完全改变思路,将“请求响应”的思路转变到“事件驱动”思路上,是一种软件编程思维的转变.

5. php是否有异步函数

没有这样的,除非你在两个方法之间加上sleep(5);
执行时间差5秒

6. PHP异步处理有哪些方法

客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果。
有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客户端。但因为php是同步执行的,所以客户端需要等待服务处理完才可以进行下一步。
因此对于耗时的操作适合异步执行,服务器接收到请求后,处理完客户端需要的数据就返回,再异步在服务器执行耗时的操作。
1.使用Ajax 与 img 标记
原理,服务器返回的html中插入Ajax 代码或 img 标记,img的src为需要执行的程序。
优点:实现简单,服务端无需执行任何调用
缺点:在执行期间,浏览器会一直处于loading状态,因此这种方法并不算真正的异步调用。

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">

2.使用popen
使用popen执行命令,语法:

// popen — 打开进程文件指针
resource popen ( string $command , string $mode )
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));

优点:执行速度快
缺点:

1).只能在本机执行
2).不能传递大量参数
3).访问量高时会创建很多进程
3.使用curl
设置curl的超时时间 CURLOPT_TIMEOUT 为1 (最小为1),因此客户端需要等待1秒

<?php
$ch = curl_init();
$curl_opt = array(
CURLOPT_URL, 'http://www.example.com/doRequest.php'
CURLOPT_RETURNTRANSFER,1,
CURLOPT_TIMEOUT,1
);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
?>

4.使用fsockopen
fsockopen是最好的,缺点是需要自己拼接header部分。

<?php

$url = 'http://www.example.com/doRequest.php';
$param = array(
'name'=>'fdipzone',
'gender'=>'male',
'age'=>30
);

doRequest($url, $param);

function doRequest($url, $param=array()){

$urlinfo = parse_url($url);

$host = $urlinfo['host'];
$path = $urlinfo['path'];
$query = isset($param)? http_build_query($param) : '';

$port = 80;
$errno = 0;
$errstr = '';
$timeout = 10;

$fp = fsockopen($host, $port, $errno, $errstr, $timeout);

$out = "POST ".$path." HTTP/1.1\r\n";
$out .= "host:".$host."\r\n";
$out .= "content-length:".strlen($query)."\r\n";
$out .= "content-type:application/x-www-form-urlencoded\r\n";
$out .= "connection:close\r\n\r\n";
$out .= $query;

fputs($fp, $out);
fclose($fp);
}

?>

注意:当执行过程中,客户端连接断开或连接超时,都会有可能造成执行不完整,因此需要加上

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时

7. php 怎样实现异步处理接口

首先 php 7以下 不支持异步方式(有个类库 可以勉强算是支持了异步 名字忘了)
其次 php脚本 由于是逐行解析的,不常驻线程(当然可以设置为永久连接,不自动超时退出) 异步意义不大。
第三 我怀疑你是想问javascript的异步请求? 如何用php处理?

如果没问错的话 可以用其他方式来解决异步问题,就是同时发出多个web request请求 等多个请求成功之后将结果写入数据库(文件) 然后 有一个 一直在等待结果的php请求进程 一旦读取到了这个写入完毕的(数据库)文件结果 马上返回给浏览器

8. php输出的内容怎样异步输出

转化为json 用json_encode()将数组转化为json 然后用jquery的 ajax方法

9. PHP-php 怎样实现异步处理接口

回复 6# rubylc_unix 如果要精确到秒执行,你在脚本做一个进队,出队的逻辑,保持列队,然后使用crontab每分钟去监控脚本。不过如果是长时间运行脚本做队列,我觉得php已经不适合你开发需求了。

10. 请教PHP的异步处理,pcntl

client:
<?php
$client=newGearmanClient();
$client->addServer('127.0.0.1', 4730);//本机可以直接addServer(),默认服务器端使用4730端口
$client->setCompleteCallback('completeCallBack');//先绑定才有效

$result1=$client->do('say','do');//do是同步进行,进行处理并返回处理结果。
$result2=$client->doBackground('say','doBackground');//异步进行,只返回处理句柄。
$result3=$client->addTask('say','addTask');//添加任务到队列,同步进行?通过添加task可以设置回调函数。
$result4=$client->addTaskBackground('say','addTaskBackground');//添加后台任务到队列,异步进行?
$client->runTasks();//运行队列中的任务,只是do系列不需要runTask()。

echo'result1:';
var_mp($result1);
echo'<br/>';

echo'result2:';
var_mp($result2);
echo'<br/>';

echo'result3:';
var_mp($result3);
echo'<br/>';

echo'result4:';
var_mp($result4);
echo'<br/>';

//绑定回调函数,只对addTask有效
functioncompleteCallBack($task)
{
echo'CompleteCallback!handle result:'.$task->data().'<br/>';
}

worker:
<?php
$worker=newGearmanWorker();
$worker->addServer();
$worker->addFunction('say',function(GearmanJob$job){
$workload=$job->workload();//接收client传递的数据
echo'receive data:'.$workload.PHP_EOL;
returnstrrev($workload);//仅作反转处理
});

//无际循环运行,gearman内部已有处理,不会出现占用过高死掉的情况
while($worker->work()){
if($worker->returnCode() !== GEARMAN_SUCCESS){
echo'error'.PHP_EOL;
}
}

以上client输出:
CompleteCallback!handle result:ksaTdda
result1:string(2) “od”
result2:string(17) “H:iZ943bixttyZ:87″
result3:object(GearmanTask)#2 (0) { }
result4:object(GearmanTask)#3 (0) { }
worker输出:
receive data:do
receive data:doBackground
receive data:addTaskBackground
receive data:addTask

阅读全文

与php异步相关的资料

热点内容
录音笔如何修改文件夹 浏览:645
八爪鱼数据采集加密文字替换 浏览:84
android系统运行动态编译的程序 浏览:419
计算编程中常用的if语句是 浏览:736
linux文件夹权限乱了 浏览:912
程序员职业病预防保健操 浏览:680
c程序修改后需不需要重新编译 浏览:725
怎样把图片分别放置在文件夹中 浏览:873
推流服务器地址是什么 浏览:632
java允许多重继承 浏览:513
解压小玩具好玩又可爱 浏览:410
腾讯云大带宽服务器 浏览:823
加密锁的售后 浏览:270
linux登不上去 浏览:731
联想服务器休眠后如何唤醒 浏览:113
四川话女孩学习编程 浏览:324
编译原理文法区分 浏览:1003
教师可以做程序员嘛 浏览:637
终结战场安卓国际服怎么下载 浏览:155
现在的高端服务器属于什么 浏览:810