后端开发|php教程
php,fsockopen,curl,异步,异步编程
后端开发-php教程
在我收到请求处理后有一个很耗时的需要请求微信接口的操作,需要处理很多订单调用微信接口。想在echo之后再执行这些操作。消息队列需要给服务器安装扩展如memcacheq之类的,我没有操作服务器的权利,想用代码解决。可不可以实现消息队列,有没有大神给个例子我对队列操作一窍不通。我看到了也可以用fsockopen 实现,这样跟消息队列机制有什么区别。
行人检测源码,vscode运行打不开闪退,ubuntu目录树,用命令安装tomcat,爬虫小说付费,metadata php,seo内容优化最基本技能,自媒体网站模板lzw
应用之星源码,vscode curl,gas ubuntu,tomcat 6.053,sts导入sqlite,轻云服务器 多站点,jq图片左右自动轮播插件,支持vue前端框架,java 网络爬虫教程,php项目维护,日照seo优化,做软件的网站,网页选项卡添加,小米网页模板,ppt页面切换效果有哪些,金蝶erp仓库管理系统,开源企业网站程序lzw
回复内容:
计算机毕业设计源码下载,vscode怎么加粗字体,ubuntu boa移植,tomcat超时后,Qt添加sqlite数据库,什么企业会招爬虫工程师,php生成验证码图片,赣州市场seo推广,刷信誉的网站,destoon教育模板lzw
在我收到请求处理后有一个很耗时的需要请求微信接口的操作,需要处理很多订单调用微信接口。想在echo之后再执行这些操作。消息队列需要给服务器安装扩展如memcacheq之类的,我没有操作服务器的权利,想用代码解决。可不可以实现消息队列,有没有大神给个例子我对队列操作一窍不通。我看到了也可以用fsockopen 实现,这样跟消息队列机制有什么区别。
//程序被阻塞10秒shell_exec( imeout 10 vmstat 1 >/dev/null 2>&1 &);//程序不会被阻塞pclose(popen( imeout 10 vmstat 1 >/dev/null 2>&1 &,
));//因此可以异步执行任务pclose(popen("timeout 60 php /path/to/task.php $arg >/dev/null 2>&1 &",
));
其中变量$arg是传递给脚本task.php的参数,task.php里通过$argv[1]拿到这个参数.
timeout 60 表示task.php脚本的最大执行时间60秒,不需要的话可以去掉.
pclose(popen())实现异步的本质是打开一个进程去执行阻塞代码,
适用于不要求执行完成后自动返回结果(回调)的异步场景.
字符串参数$arg可以用单引号括起来,可以避免一些空格的影响,但还是有缺陷.
为了避免Shell注入(对比SQL注入),字符串参数最好还是serialize序列化到文件,
然后给脚本task.php传文件路径这个参数,让task.php自己读文件unserialize反序列化拿数据.
文件名应该做到唯一,比如可以是用户ID+进程PID+时间随机数:
$filename = md5(uniqid($uid.\_.getmypid().\_.mt_rand().\_, true));
PHP-FPM提供的函数fastcgi_finish_request
可以冲刷(flush)所有响应的数据给客户端并结束请求.这使得客户端结束连接后,能够继续执行不需要输出给用户的代码,比如生成缓存,但仍会阻塞当前FPM工作进程.
/manual/zh/func…
fsockopen 意思就是发出一个请求(类似curl),但是不等待返回结果。
所以用fsockopen 也可以,你echo之后fsockopen 请求一下本地上对微信接口的操作,就可以了
如果觉得《curl – php不装扩展如何实现异步操作》对你有帮助,请点赞、收藏,并留下你的观点哦!