嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-03-22 4091 次浏览 标签 : ZzBlog

邮件异步提醒代码演示:http://mengkang.net/33.html

下面为之前的分析,可忽略不看。

有网友评论文章,应该第一时间收到邮件通知,这是博客的基本组件。我当然是用phpmailer来完成了。

邮件内容中应该附带的信息有:

博客文章的的链接和回复的楼层的锚点,这样才能准确的找到回复的内容。当然最好也直接把回复的内容放到邮件中去。

还有留言者的昵称。

我学ThinkSNS,建了一个library的目录,我暂时用来专门放第三方插件吧。把phpmailer放到里面。

然后在回复确定插入到数据之后,触发邮件的发送。

这些在逻辑和代码上实现都比较简单。

        if($res>0){
            //留言成功的情况
            //获取其楼层
            $floor = d()->q("select count(*) as num from z_comment where blogid = {$blogid} and `posttime` < {$posttime}");
            $floor = 1 + $floor[0]['num'];
            //TODO 关于网站site_url还需要重新配置定义,目前的是不够用的
            $url = 'http://'.$_SERVER['HTTP_HOST'].'/'.U('Blog/blog',array('id'=>$blogid)).'#floor'.$floor;
            $blogtitle = d()->q("select `title` from z_blog where id = {$blogid}");
            $mailBody = '<h3>'.$blogtitle[0]['title'].'&nbsp&nbsp有新的留言</h3>
                        <p>'.$username.' < '.$email.' >在评论中说:</p>
                        <div style="border-radius: 4px;margin: 10px 0 10px;border: 1px dashed #BEB0B0;padding: 8px;background: #F0F0F0;">'.$content.'</div>
                        <p><a href="'.$url.'">点击链接查看</a></p>';
            new MailModel('i@zhoumengkang.com','康哥',$mailBody,'主公,北剅轩有客来访');
            $this->ajaxReturn(1,'评论成功',$data);
        }else{
            $this->ajaxReturn(0,'评论失败',$data);
        }

其实我想的是能不能实现异步操作,让发送邮件的操作,放入邮件发送任务队列,给博主(我)发邮件可以延迟一会,但是给留言者的反馈却应当是即时的,不要让留言者感觉到他在等邮件发送而造成

上面只是我的设想,没想到真的会很卡,刚刚测试了下,在真实服务器(腾讯的服务器3M带宽),发现等待时间都在1.4秒到1.9秒之间。似乎太久了。看上去似乎都是卡死了。室友公司工作用的消息队列用得多,推荐我使用http://www.php.net/manual/zh/book.gearman.php

网上搜了下PHP 异步参考资料:

http://www.laruence.com/2008/04/14/318.html 

http://www.cnblogs.com/fuyunbiyi/archive/2013/03/27/2985089.html

配合linux的定时任务机制的方案(类似于cron),不太适合,因为我的博客的留言肯定不会很多,这样的定时轮询90%是在做无用功。

最后我也决定选择fsockopen

参考资料:

http://www.php.net/manual/en/function.fsockopen.php

看官方没有翻译,我就自己+词典翻译下吧,希望哪天也能发到php.net官方上去......http://mengkang.net/22.html

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表