当前位置:首页 » 编程语言 » 异步回调PHP

异步回调PHP

发布时间: 2022-09-10 08:36:59

Ⅰ 如何让thinkphp程序走异步回调

classProgram
{
publicdelegateintSumCallback(intx,inty);
publicintSum(intx,inty)
{
Console.WriteLine("等待...");
System.Threading.Thread.Sleep(2000);
returnx+y;
}
publicvoidCallback(IAsyncResultar)
{
Console.WriteLine("回调...");
AsyncResultresult=arasAsyncResult;
if(result!=null)
{
SumCallbackcaller=(SumCallback)result.AsyncDelegate;
Console.WriteLine(caller.EndInvoke(result));
}
}
staticvoidMain(string[]args)
{
SumCallbacksc=newProgram().Sum;
IAsyncResultresult=sc.BeginInvoke(1,2,newProgram().Callback,sc);
Console.WriteLine("主线程...");
Console.ReadKey(true);
}
}

Ⅱ php的CI框架如何实现异步调用

在你自定义的类库中初始化CodeIgniter资源

要你自定义的类库中访问CodeIgniter的原始资源,你必须使用 get_instance() 函数.这个函数返回一个CodeIgniter super object.

一般来说在你的控制器函数中你可以通过 $this 调用任何可用的CodeIgniter函数:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
//etc.
$this, 只直接作用在你自己的控制器,模型和视图中.当你在自定义类中想使用CodeIgniter原始类时,你可以这样做:

首先,定义CodeIgniter对象赋给一个变量:
$CI =& get_instance();
一旦定义某个对象为一个变量,你就可以使用那个变量名 取代 $this:
$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
//etc.
注意: 你将注意到get_instance()这个函数通过被引用的方式被传递:

$CI =& get_instance();

这十分重要. 通过引用的方式赋给变量将使用原始的 CodeIgniter 对象,而不是创建一个副本。

//------------------------------------------------------------------------------------------------//
我想这也许是你需要的.$CI =& get_instance();之后再用$CI->load->library('session');等方法加载你需要的

Ⅲ 请教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 异步回调接收到信息后怎么返回success

如何在$ajax方法的success回调方法中获取当前对象 jquery.ajax方法在执行成功之后,

Ⅳ PHP如何调用API用异步方式回执过来的消息

单独写一个接口,然后用ajax触发调用就可以,返回JSON就可以

Ⅵ php支付宝手机网站支付,异步回调和同步回调里面应该怎么写

你在支付宝商户中心申请到相应的接口,例如大多数网站对接支付宝用的“即时转账接口”,申请到之后在支付宝商户中心能够找到相应的接口demo下载,里面就有php的demo,参考里面的异步回调和同步回调的写法即可

Ⅶ PHP 怎样异步处理

  • 利用php的系统调用,开启新的进程来实现。

  • php
    提供了fsockopen函数,此函数的功能为初始化一个套接字连接到指定主机,默认情况下将以阻塞模式开启套接字连接。当然你可以通过stream_set_blocking()将它转换到非阻塞模式。这是关键。所以,思路就是:开启一个非阻塞的套接字连接到本机,本机收到之后作一些耗时处理。

Ⅷ 如何使用fscok实现异步调用PHP的代码案例

PHP是支持socket编程的,就是fsockopen, 在以前做CMS的时候,我也曾经用过它做过smtp发信。
fscokopen返回一个到远程主机连接的句柄。你可以像使用fopen返回的句柄一样,对她进行写fwrite,读取fgets, fread等操作。

Ⅸ php异步调试和线上调试网站程序

php异步调试和线上调试网站程序

php异步调试和线上调试网站程序既方便网站程序错误调试,又不影响网站的正常运行的调试方法。下面是我为大家带了的php异步调试和线上调试网站程序,欢迎阅读。

php异步调试和线上调试网站程序

代码如下

//ini_set('error_reporting',E_ALL ^ E_NOTICE);//显示所有除了notice类型的错误信息

ini_set('error_reporting',E_ALL);//显示所有错误信息

ini_set('display_errors',off);//禁止将错误信息输出到输出端

ini_set('log_errors',On);//开启错误日志记录

ini_set('error_log','C:/phpernote');//定义错误日志存储位置

另外附加两句比较常用的排除错误信息的PHP语句:

代码如下

@ini_set('memory_limit','500M');//设置程序可占用最大内存为500MB

@ini_set('max_execution_time','180');//设置允许程序最长的执行时间为180秒

补充

die()和exit()也是我们常用的php调试一个方法

die()和exit()函数都有终止线程的作用,是php断点调试需要使用的最主要的函数,它们也是php程序员使用非常频繁的函数。然而两者又有什么区别呢?在程序调试时需要注意什么问题呢?

die()函数一般与“or”一并使用,写作“or die()”,经常看到这样的语句:

代码如下

$file = fopen($filename, 'r') or die("抱歉,无法打开: $filename")

or在这里是这样理解的,因为在PHP中并不区分数据类型,所以$file既可以是int也可以bool,所以这样的语句不会报错。但其处理过程可能有些朋友不大明白。其实在大多数的语言中, bool or bool这样的语句中,如果前一个值为真后一个值就不会再判断了。这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0的int值(这其实就是"真"),后面的语句就不会执行了。如果fopen函数执行失败,就会返回false,那么就会判断后面的表达式是否为真了。结果执行了die()之后,不管返回什么,程序都已经停止执行了,并且显示指定的.出错信息,也就达到了调试的目的。就这样。

实际上,die和exit是等价的,都是用来终止当前脚本

php手册对两者的解释如是说:

exit() 函数输出一条消息,并退出当前脚本。该函数是 die() 函数的别名。

die() 函数输出一条消息,并退出当前脚本。该函数是 exit() 函数的别名。

实例:

代码如下

<?php $site = "http://www.111cn.net/"; fopen($site,"r") or exit("Unable to connect to $site"); ?>

<?php $site = "http://www.111cn.net/"; fopen($site,"r") or die("Unable to connect to $site"); ?>

var_mp()和print_r()

var_mp -- 打印变量的相关信息

void var_mp ( mixed expression [, mixed expression [, ...]] )

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

提示: 为了防止程序直接将结果输出到浏览器,可以使用输出控制函数(output-control functions)来捕获此函数的输出,并把它们保存到一个例如 string 类型的变量中。

代码如下

<?php

$a = array (1, 2, array ("a", "b", "c"));

var_mp ($a);

$b = 3.1;

$c = TRUE;

var_mp($b,$c);

?>

var_mp()可以输出多个变量,如:var_mp($b,$c)

print_r -- 打印关于变量的易于理解的信息

bool print_r ( mixed expression [, bool return] )

注: 参数 return 是在 PHP 4.3.0 的时候加上的

print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。

记住,print_r() 将把数组的指针移到最后边。使用reset() 可让指针回到开始处。

代码如下

<pre>

<?php

$a = array ('a' => 'apple',

'b' => 'banana',

'c' => array ('x','y','z'));

print_r ($a);

?>

</pre>

上边的代码将输出:

<pre> Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) ) </pre>

如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为 TRUE,print_r() 将不打印结果(此为默认动作),而是返回其输出。

例子:return 参数示例

代码如下

<?php

$b = array ('m' => 'monkey',

'foo' => 'bar',

'x' => array ('x', 'y', 'z'));

$results = print_r ($b, true); //$results 包含了 print_r 的输出结果

?>

注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的输出,可使用输出控制函数。

注: 在 PHP 4.0.4 之前的版本中,如果给出的 array 或 object 包含了直接或间接指向自身的引用,print_r() 将永远继续下去。print_r($GLOBALS) 就是一个例子,因为 $GLOBALS 自身即是全局变量,其包含了指向自身的引用。

下面的几个函数可以让你随时查看程序中任何变量的类型及其值。

代码如下

function ss_array_as_string (&$array, $column = 0) {

$str = "Array(

n";

while(list($var, $val) = each($array)){

for ($i = 0; $i < $column+1; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

$str .= $var. ==>; ;

$str .= ss_as_string($val, $column+1)."

n";

}

for ($i = 0; $i < $column; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

return $str.);

}

function ss_object_as_string (&$object, $column = 0) {

if (empty($object->;classname)) {

return "$object";

}

else {

$str = $object->;classname."(

n";

while (list(,$var) = each($object->;persistent_slots)) {

for ($i = 0; $i < $column; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

global $$var;

$str .= $var. ==>; ;

$str .= ss_as_string($$var, column+1)."

n";

}

for ($i = 0; $i < $column; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

return $str.);

}

}

function ss_as_string (&$thing, $column = 0) {

if (is_object($thing)) {

return ss_object_as_string($thing, $column);

}

elseif (is_array($thing)) {

return ss_array_as_string($thing, $column);

}

elseif (is_double($thing)) {

return "Double(".$thing.")";

}

elseif (is_long($thing)) {

return "Long(".$thing.")";

}

elseif (is_string($thing)) {

return "String(".$thing.")";

}

else {

return "Unknown(".$thing.")";

}

}


;

Ⅹ 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); // 设置执行不超时

热点内容
win7的缓存文件夹 发布:2025-01-12 23:32:12 浏览:954
安卓哪个文件锁好 发布:2025-01-12 23:31:23 浏览:325
怎么让安卓用苹果耳机有弹窗 发布:2025-01-12 23:30:34 浏览:958
oracle存储过程有返回值 发布:2025-01-12 23:30:34 浏览:7
用友服务器怎样同步ip 发布:2025-01-12 23:29:52 浏览:979
qt编译vlcqt库 发布:2025-01-12 23:24:45 浏览:244
攻击linux服务器 发布:2025-01-12 23:17:01 浏览:6
天籁哪个配置亲民 发布:2025-01-12 23:16:26 浏览:482
零售通交易密码是什么 发布:2025-01-12 23:13:02 浏览:319
监控器压缩 发布:2025-01-12 22:51:29 浏览:248