PHP从主流的观点,是一个面向过程的
语言,其最大的缺点是无法实现多
线程管理,
程序的
执行是从A到Z的逻辑依据,行政部门,不能出现,这是PHP的主流编程语言之一对于更高级的语言发展的
原因的限制。
在PHP中,我们有时真的希望在执行
操作时,同时为一个场景执行另一个操作:当
用户抢选票时,您不想
连接到数据库
查询,插入行判断,用户完成后,用户返回结果。用户提交后,他可以告诉他,他已经成功地抢到了票,所以对于所有
类型的操作,在后台
处理的很好。当然,这种
情况我们现在使用邮件列表的处理,对于每个用户的请求
消息队列,用户必须在固定的告诉用户,
关闭页面,
背景是从队列中请求操作的消息。在这篇文章中,该操作是在后台进行的,用户无需
等待。
首先,我们必须
创建一个请求条目:
< PHP
提交的数据
提交后台
告诉用户它已经完成了
第二,我们需要一个不
影响用户在线
运行的后端
处理器。
< PHP
ignore_user_abort(真的);
(0)set_time_limit;
数据来自
数据处理
现在的问题是,在第一部分,如何提交背景我们通过一个非阻塞请求实现这个
函数,即创建一个可以访问的URL。在这个URL中,运行第二段程序,通过请求请求URL,并
激活第二段程序自动运行。
然后让我们直接看看代码:
远程请求(未获取内容)函数
功能_sock($url){
为主机= parse_url($ URL,php_url_host);
港口parse_url美元($ URL,php_url_port);
$端口$端口:80;
$方案= parse_url($ URL,php_url_scheme);
路径= parse_url美元($ URL,php_url_path);
查询= parse_url美元($ URL,php_url_query);
如果(查询)路径$$查询;
如果($方案= = 'https){
为主机= 'ssl: / /。为主机;
}
FP = fsockopen(美元美元美元美元的主机,端口,error_code,error_msg美元,1);
如果(!$ FP){
返回的数组('error_code'error_code美元,'error_msg ' = $ error_msg);
}
{其他
stream_set_blocking($ FP,true); / /打开阻塞
模式手动非说
stream_set_timeout($ FP,1); / /
设置超时
元头= 获取$路径1.1;
$;
元头=连接:关闭;长连接关闭
fwrite($ FP,$标题);
usleep(1000); / /这句话是关键,如果没有这个延迟,可能在nginx
服务器无法成功执行
Fclose($ FP);
返回的数组('error_code ' = 0);
}
}
我们创建了一个基于函数fsockopen,使用fsockopen访问URL的功能。然而,在访问时,它不需要获取URL
显示的内容,而是简单地发送访问请求,然后在请求到达后立即关闭访问,这种
方法的优点是不需要等待访问的URL返回可靠的信息并节省时间。这段代码的执行时间在0.1-0.2秒,这是普通游客几乎看不见的。所以,在使用时,你只需要调用这个函数和对应的URL。然而,也有一部分没有数据
传输到这里。如何传输数据只需要将内容添加到$头。
除了fsockopen、卷曲实际上可以达到这样的效果,和一些主机不
支持fsockopen,我们可以使用curl实现它。
功能_curl($url){
CH = curl_init(美元);
curl_setopt(CH美元,美元curlopt_url,URL);
curl_setopt($ CH,curlopt_returntransfer,1);
curl_setopt($ CH,curlopt_timeout,1);
结果= curl_exec美元($ CH);
curl_close($ CH);
返回$结果;
}
这段代码的关键是提供一个超时,这是只有1秒,也就是说,卷曲发出请求,是否接收到返回的内容,它会在1秒后关闭访问,所以这个函数的执行数据1。1秒,但是对于用户来说,如果需要一个数据处理
应用程序,一秒钟内的等待几乎被忽略。如果您想使用更简单、更易于理解的代码,可以选择旋度来实现。
以上PHP异步:在PHP中,使用fsockopen curl实现类似的异步处理功能的方法是萧边
分享给你的所有内容,希望能给大家一个
参考,我希望你能支持更多。