php后端异步处理数据,详解 PHP 异步后台处理

本文介绍了PHP如何实现异步后台处理,通过fsockopen函数开启非阻塞套接字连接,实现请求发送后立即返回,达到异步效果。同时探讨了PHP异步执行的4种常用方式:ajax请求、popen()函数、curl扩展和fsockopen()函数,分析了各自的优缺点,并提供了实际应用示例。
摘要由CSDN通过智能技术生成

e0e5da32b7c7bcb43f207fce1fb2b007.png

PHP 异步后台处理

PHP 作为后台的接口服务器已经很常见,在实际应用场景中经常需要异步后台处理。

推荐:《PHP视频教程》

PHP 当然具有它能作为后台服务器的优势之处,但是,在处理一些客户端并不关心的结果时,就显出它的弊端了,没有异步执行的机制。

就比如我们想做一些对于某次客户端访问php的性能记录(包括开始时间、结束时间、此次结果状态等)的记录时,客户端当然想的是php的本次处理能够早点返回,拿到结果,而如果安装常规的方案,客户端就得等php做完性能记录之后,才能拿到结果。

相当于你去银行去查你现在的余额,而柜员跑过去跟其他人闹了一会儿的磕,在来告诉你的结果一样。

所以,很多时候,就需要一种php能执行异步操作。

PHP 如何实现异步处理呢?

其中一种方案就是利用php的系统调用,开启新的进程来实现。

php 提供了fsockopen函数,此函数的功能为初始化一个套接字连接到指定主机,默认情况下将以阻塞模式开启套接字连接。

当然你可以通过stream_set_blocking()将它转换到非阻塞模式。这是关键。

所以,思路就是:开启一个非阻塞的套接字连接到本机,本机收到之后作一些耗时处理。

类似这样的处理代码(文件posttest.php):$fp = fsockopen($php_Path,80);

if (!$fp) {

LMLog::error("fsockopen:err" );

} else {

$out = "GET /album/action/album_write_friends_thread_record.php?key=&u= HTTP/1.1\r\n";

$out .= "Host: ".$php_Path."\r\n";

$out .= "Connection: Close\r\n\r\n";

stream_set_blocking($fp,true);

stream_set_timeout($fp,1);

fwrite($fp, $out);

usleep(1000);

fclose($fp);

}

这里,usleep(1000) 非常关键,它能保证这个请求能发出去。

我们在来看处理的代码逻辑(文件album_write_friends_thread_record.php):<?php

/**

* Created by PhpStorm.

* User: Administrator

*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值