修改php等待时间,php异步实现,避免长时间等待

处理的php异步的方法有好几种,这里我就只介绍我经常用的而且官方也推荐的

废话少说,直接贴代码

//php异步

public function doRequest($host,$path, $param=array()){

$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);

}

//调用实例:(我这里值介绍POST方式,GET方便那么简单就不介绍了,一样的

//参数说明:参数1[请求目标地址的主域名],参数2[路劲,一般是"入口文件/模块/控制器/操作方法",当然也不排除你的单个php文件访问,后面就是你要进行传递的数据了了]

public function ybutest(){

$this->doRequest('www.cms.com','/api.php/User/Users/login',array(

'username'=>'test001',

'pwd'=>'123456',

'service_type'=>1,

'call_back_rul'=>'http://www.dbtool.com/index.php/Home/Index/test_write',

)

);

}

要设置 PHP 中的异步查询超时时间,可以使用以下两种方法之一: 1. 使用 MySQLi 扩展库的 mysqli_poll 函数 mysqli_poll 函数可以用来轮询一组 MySQL 连接,以检查是否有可用的结果集或请求需要完成。 在 mysqli_poll 函数中,可以设置连接的超时时间,以确保异步查询不会因为等待结果而阻塞过长时间。 示例代码如下: ``` $links = array(); // 数组内存放 MySQL 连接对象 $processed = 0; $timeout = 10; // 超时时间为 10 秒 // 开始轮询连接,直到所有查询都完成或超时 do { $links_to_poll = array(); foreach ($links as $link) { // 只轮询尚未处理完的连接 if ($link->query_is_pending) { $links_to_poll[$link->thread_id] = $link; } } if (count($links_to_poll) > 0) { // 轮询连接,直到有可用的结果集或请求完成 if (mysqli_poll($links_to_poll, $timeout) === false) { // 轮询失败,可能是超时了 break; } // 处理所有已经就绪的连接 foreach ($links_to_poll as $link) { if ($link->reap_query()) { // 查询已经成功完成 $processed++; } } } else { // 所有查询都已经完成 break; } } while ($processed < count($links)); ``` 在上面的示例代码中,循环检查每个 MySQL 连接的 query_is_pending 属性,如果该属性为 true,则将连接加入轮询数组 $links_to_poll 中。调用 mysqli_poll 函数,阻塞等待直到所有连接都有可用的结果集或请求完成,或者超时时间到达。如果 mysqli_poll 函数返回 false,则说明超时了。如果 mysqli_poll 函数返回 true,则处理所有已经就绪的连接,将其对应的 query_is_pending 属性置为 false,表示该查询已经完成。 2. 使用 MySQLnd 模块中的 mysqlnd_ms_set_timeout 函数 如果使用 MySQLnd 模块来访问 MySQL 数据库,可以使用 mysqlnd_ms_set_timeout 函数来设置异步查询的超时时间。 示例代码如下: ``` $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; exit; } $mysqli->query("SELECT * FROM my_table WHERE id = 1", MYSQLI_ASYNC); // 设置异步查询的超时时间为 10 秒 mysqlnd_ms_set_timeout($mysqli, 10); ``` 在上面的示例代码中,首先创建一个 mysqli 对象,然后使用 MYSQLI_ASYNC 参数执行一个异步查询。最后调用 mysqlnd_ms_set_timeout 函数,将异步查询的超时时间设置为 10 秒。当异步查询超时后,mysqli_poll 函数将返回 false,可以在循环中检查该情况并退出查询循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值