最近开发中遇到这么一个问题,程序第4行会请求一个url,但是这个url的响应时间很长,而且我的程序中用不到他的返回值,所以我在想能不能在第4行发送请求之后不用等待他返回值,直接执行第5行代码,可以吗?如果可以的话,怎么做到?
最近开发中遇到这么一个问题,程序第4行会请求一个url,但是这个url的响应时间很长,而且我的程序中用不到他的返回值,所以我在想能不能在第4行发送请求之后不用等待他返回值,直接执行第5行代码,可以吗?如果可以的话,怎么做到?
http://www.laruence.com/2008/04/14/318.html
sleep(10)这个长达10秒的操作由正在提供Web服务的PHP进程来处理显然是不合适的,因为这肯定会造成一个PHP工作进程被阻塞.这时可以考虑用popen或proc_open异步调用一个CLI程序进行一些耗时的操作.
/www/index.php
<?php
$sec = 10;
//pclose(popen('/www/cli.php '.$sec.' &', 'r'));
pclose(popen("/www/cli.php -s $sec &", 'r'));
/www/cli.php
#!/png/php/5.4.39NTS/bin/php
<?php
$argv = getopt('s:');
sleep($argv['s']);
file_put_contents('/www/cli.txt', $argv['s']);
//print_r($argv);
//cli.php处理完耗时的任务后往数据库存结果,浏览器端用AJAX轮询异步得到数据.
如果你用不到这个返回,你可以直接把这个地址存到数据库,由别的程序在服务器上执行
立即学习“PHP免费学习笔记(深入)”;
要是用php-fpm可以看看这个函数fastcgi_finish_request
你把运行慢的代码写在这个函数之后就可以了
http://php.net/manual/zh/function.fastcgi-finish-request.php
可以使用 php 异步扩展 swoole.
可以用多线程,pthread扩展,http://php.net/manual/en/book.pthreads.php
把请求操作放在队列中,异步执行
<?php
$context = stream_context_create(array(
'http' => array(
'timeout' => 5
)
));
$contents = file_get_contents('http://www.google.com', 0, $context);
echo '5秒后到这'
?>
用队列请求
用队列请求
用队列请求
这肯定是不可以的 !
要么你使用队列执行 .
要么 你用 swoole 或者 Node.js
PHP 在设计上就决定了 , 它只能从头到尾执行 。
生产者/消费者模式
简单粗暴的写法,可以把这个逻辑用register_shutdown_function()执行
你不需要返回一个请求的内容 你去请求他干啥。。。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号