PHP异步调用的实现方式
$i=0;
while ($i
对于以上事例代码的用户体验就很差,实际上也没人会这么干,那么怎样使用程序后台异步执行,而又不影响用户的体验呢?
求思路...
回复内容:
比如现在有个需求,就是给大量用户发送邮件:
$i=0;
while ($i
对于以上事例代码的用户体验就很差,实际上也没人会这么干,那么怎样使用程序后台异步执行,而又不影响用户的体验呢?
求思路...
我们使用的是laravel框架 + beanstalkd 队列,网上有安装和使用的说明.
youku里有一个laravel框架的视频教程,有一章就是讲队列的.
简单点,你按照那上面来做一遍就行了.
http://v.youku.com/v_show/id_XNzgzNjQ2ODQ0.html
Laravel+Redis也行,你自己先试试,不明白继续提问.
还有一种方式,你用swoole框架. 用里面的异步调用.详见:www.swoole.com
或者更简单的方式,但不适合你这种情况,但可以参考:http://www.laruence.com/2008/04/14/318.html
你看着三种方式哪种更适合些?
用redis服务 消息队列做两个php进程的之间的通讯,实现多个进程异步执行
使用消息队列。
1、建立一个邮件队列数据表和一个插入邮件队列的PHP公共函数
2、在需要发送邮件的地方,调用上面的PHP公共函数,将邮件先写到邮件队列中。
3、用crontab建立一个定时任务,定期扫描邮件队列,如果有未发送的邮件,则进行发送
其实示例代码没有错,实际上也就是这么做的,只不过是作为单独一个进程来执行的,就像楼上几位说的一样。但是这依然是用阻塞模式运行的。
redis队列和php多进程,和一楼思路一样的,之前项目中也是用的这种方式。
推荐Gearman,百万级生产环境跑过。
我们的shopex为了兼容各种虚拟主机曾经这么干过:
页面下面挂个
ignore_user_abort(true);
set_time_limit(0);
header('Content-Lenght: 6');
echo 'void()';
...干一部分活...
curl / fsockopen 请求自己...
别忘了, 开头加个锁, 避免同时干活的太多.
使用Linux的CRON任务或者使用fsockopen来实现或者CURL
可以使用第三方邮件发送服务平台
下一篇: Feign源码解析系列-那些注解们
推荐阅读
-
java 单例的五种实现方式及其性能分析
-
Spring Boot利用@Async如何实现异步调用:自定义线程池
-
Android编程实现调用相册、相机及拍照后直接裁剪的方法
-
Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解
-
探究 canvas 绘图中撤销(undo)功能的实现方式详解
-
html5调用摄像头功能的实现代码
-
c#中WebService的介绍及调用方式小结
-
Python中asyncore异步模块的用法及实现httpclient的实例
-
Android App端与PHP Web端的简单数据交互实现示例
-
Android TextView实现带链接文字事件监听的三种常用方式示例