失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > curl – php不装扩展如何实现异步操作

curl – php不装扩展如何实现异步操作

时间:2018-09-01 07:44:57

相关推荐

curl – php不装扩展如何实现异步操作

后端开发|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不装扩展如何实现异步操作》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。