php不装扩展如何实现异步操作
在我收到请求处理后有一个很耗时的需要请求微信接口的操作,需要处理很多订单调用微信接口。想在echo之后再执行这些操作。消息队列需要给服务器安装扩展如memcacheq之类的,我没有操作服务器的权利,想用代码解决。可不可以实现消息队列,有没有大神给个例子我对队列操作一窍不通。我看到了也可以用fsockopen 实现,这样跟消息队列机制有什么区别。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其中变量$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+时间随机数:
PHP-FPM提供的函数
fastcgi_finish_request
可以冲刷(flush)所有响应的数据给客户端并结束请求.这使得客户端结束连接后,能够继续执行不需要输出给用户的代码,比如生成缓存,但仍会阻塞当前FPM工作进程.http://php.net/manual/zh/func...
fsockopen 意思就是发出一个请求(类似curl),但是不等待返回结果。
所以用fsockopen 也可以,你echo之后fsockopen 请求一下本地上对微信接口的操作,就可以了