真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php如何異步處理數(shù)據(jù),php異步隊(duì)列

請(qǐng)教PHP的異步處理,pcntl

client:

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元汶上做網(wǎng)站,已為上家服務(wù),為汶上各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

?php

$client=newGearmanClient();

$client-addServer('127.0.0.1', 4730);//本機(jī)可以直接addServer(),默認(rèn)服務(wù)器端使用4730端口

$client-setCompleteCallback('completeCallBack');//先綁定才有效

$result1=$client-do('say','do');//do是同步進(jìn)行,進(jìn)行處理并返回處理結(jié)果。

$result2=$client-doBackground('say','doBackground');//異步進(jìn)行,只返回處理句柄。

$result3=$client-addTask('say','addTask');//添加任務(wù)到隊(duì)列,同步進(jìn)行?通過(guò)添加task可以設(shè)置回調(diào)函數(shù)。

$result4=$client-addTaskBackground('say','addTaskBackground');//添加后臺(tái)任務(wù)到隊(duì)列,異步進(jìn)行?

$client-runTasks();//運(yùn)行隊(duì)列中的任務(wù),只是do系列不需要runTask()。

echo'result1:';

var_dump($result1);

echo'br/';

echo'result2:';

var_dump($result2);

echo'br/';

echo'result3:';

var_dump($result3);

echo'br/';

echo'result4:';

var_dump($result4);

echo'br/';

//綁定回調(diào)函數(shù),只對(duì)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傳遞的數(shù)據(jù)

echo'receive data:'.$workload.PHP_EOL;

returnstrrev($workload);//僅作反轉(zhuǎn)處理

});

//無(wú)際循環(huán)運(yùn)行,gearman內(nèi)部已有處理,不會(huì)出現(xiàn)占用過(guò)高死掉的情況

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 怎樣異步處理

利用php的系統(tǒng)調(diào)用,開(kāi)啟新的進(jìn)程來(lái)實(shí)現(xiàn)。

php

提供了fsockopen函數(shù),此函數(shù)的功能為初始化一個(gè)套接字連接到指定主機(jī),默認(rèn)情況下將以阻塞模式開(kāi)啟套接字連接。當(dāng)然你可以通過(guò)stream_set_blocking()將它轉(zhuǎn)換到非阻塞模式。這是關(guān)鍵。所以,思路就是:開(kāi)啟一個(gè)非阻塞的套接字連接到本機(jī),本機(jī)收到之后作一些耗時(shí)處理。

php如何實(shí)現(xiàn)腳本異步執(zhí)行的方法具體分析

php語(yǔ)言得用fsockopen()函數(shù),實(shí)現(xiàn)腳本異步運(yùn)行,代碼如下

異步請(qǐng)求函數(shù)(用debug參數(shù)若為true則為用為調(diào)試,開(kāi)啟調(diào)試可以看到異步的執(zhí)行情況,但是失去異步的效果)

main.php

?php

/**

*?異步請(qǐng)求

*?@copyright??Copyright?(c)?Hangzhou?Technology?Co.,Ltd.?()

*?@author?????$Author:?juny?$

*?@version????$Id:?main.php?332?2018-09-23?09:15:08Z?juny?$

*/

function?request_by_fsockopen($url,$post_data=array(),$debug=false){

$url_array?=?parse_url($url);

$hostname?=?$url_array['host'];

$port?=?isset($url_array['port'])??$url_array['port']?:?80;

@$requestPath?=?$url_array['path']?."?".?$url_array['query'];

$fp?=?fsockopen($hostname,?$port,?$errno,?$errstr,?10);

if?(!$fp)?{

echo?"$errstr?($errno)";

return?false;

}

$method?=?"GET";

if(!empty($post_data)){

$method?=?"POST";

}

$header?=?"$method?$requestPath?HTTP/1.1\r\n";

$header.="Host:?$hostname\r\n";

if(!empty($post_data)){

$_post?=?strval(NULL);

foreach($post_data?as?$k?=?$v){

$_post[]=?$k."=".urlencode($v);//必須做url轉(zhuǎn)碼以防模擬post提交的數(shù)據(jù)中有符而導(dǎo)致post參數(shù)鍵值對(duì)紊亂

}

$_post?=?implode('',?$_post);

$header?.=?"Content-Type:?application/x-www-form-urlencoded\r\n";//POST數(shù)據(jù)

$header?.=?"Content-Length:?".?strlen($_post)?."\r\n";//POST數(shù)據(jù)的長(zhǎng)度

$header.="Connection:?Close\r\n\r\n";//長(zhǎng)連接關(guān)閉

$header?.=?$_post;?//傳遞POST數(shù)據(jù)

}else{

$header.="Connection:?Close\r\n\r\n";//長(zhǎng)連接關(guān)閉

}

fwrite($fp,?$header);

//-----------------調(diào)試代碼區(qū)間-----------------

//注如果開(kāi)啟下面的注釋,異步將不生效可是方便調(diào)試

if($debug){

$html?=?'';

while?(!feof($fp))?{

$html.=fgets($fp);

}

echo?$html;

}

//-----------------調(diào)試代碼區(qū)間-----------------

fclose($fp);

}

$data=array('name'='guoyu','pwd'='123456');

$url='';

request_by_fsockopen($url,$data,true);//

other.php

?php

header("content-type:text/html;charset=utf-8");

//error_reporting(0);

//ini_set('html_errors',false);

//ini_set('display_errors',false);

$name?=?isset($_POST['name'])?$_POST['name']:'';

$pwd?=?isset($_POST['pwd'])?$_POST['pwd']:'';

echo?$name.$pwd;

echo?'success?ok';

die;

?

使用實(shí)例:

[運(yùn)行的main.php主腳本文件]

$data=array('name'='guoyu','pwd'='123456');

$url='';

request_by_fsockopen($url,$data,true);//把應(yīng)用B的用戶表異步-同步數(shù)據(jù)

[導(dǎo)步執(zhí)行文件other.php]

在other.php中便可以用$_POST接收main.php提交過(guò)來(lái)的參數(shù),從而進(jìn)行下一步操作

以上就是php如何實(shí)現(xiàn)腳本異步執(zhí)行的方法具體分析的詳細(xì)內(nèi)容.


當(dāng)前題目:php如何異步處理數(shù)據(jù),php異步隊(duì)列
文章網(wǎng)址:http://weahome.cn/article/hcdihs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部