马上注册,免费下载更多dz插件网资源。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
DISCUZX3/X25社区云上报/计划任务异步机制方案1.0.2beta[7.22日更新]
7.22日更新
1,优化超时问题
2,修正一个Exception错误
很多站长开启了防水墙等功能,在每次发帖的时候都会同步请求云端,这样当网络不畅的时候很容易导致“卡顿”的情况出现影响用户体验。
同理,社区的计划任务也是把社区后台的各种任务附加到用户的访问动作上,给用户造成社区突然很卡了的假象。
于是,我们开发了这个社区的异步机制来处理这个问题。
什么是异步?:
在执行过程中,我们把那些会造成卡的部分分离出来,放到后台来执行。
方案原理:
我们借助redis的队列机制的BLPOP方法,在一个死循环中等待队列中的可弹出的元素,否则就阻塞连接。
在后台处理前台提交过来的上报任务。
方案前提:
1,独立服务器,能执行命令行,并且安装了redis服务以及php-redis扩展。
2,服务器能执行计划任务。
实施步骤:
1,到 https://www.dismall.com/thread-12045-1-1.html 按提示安装框架。如果已经安装好可跳过此步。
2,关闭社区,此过程大约需要5~15分钟。
3,确保社区已经安装好redis以及php-redis扩展,如果没有安装可以参考帖子下方的方法。
4,下载帖子中的附件,并上传到服务器(不会覆盖任何文件)
5,切换到extend/bin目录,执行如下命令:- ~$nohup php bin_async_cron.php&
复制代码 6,在配置文件的最下方加入如下配置:- $_config['extend']['asynctask']['on'] = 1;
复制代码 在配置文件中找到如下两项按如下配置:- $_config['remote']['on'] = '1';$_config['remote']['cron'] = '1';
复制代码 7,执行命令:添加如下代码到最后一行- * * * * * curl "http://你的站/api/remote/index.php?mod=cron"
复制代码 8,可以到bin目录下查看out文件,里面记录了云上报日志,如果发现里面的剩余成员数一直在增加可以再次执行步骤5,新增一个进程来执行。
注意事项:
1,为了避免重启后任务丢失,建议把步骤5添加到开机启动里。
2,由于linux计划任务最多每分钟执行一次,所以社区的任务执行可能有所延后而不是准点执行,比如今日发帖的任务可能就不是准点更新而是延后了几分钟。
3,请限制extend/bin目录只能本机访问,尤其是该脚本存在死循环,一定不要在浏览器下执行。
linux系统安装redis服务简单步骤:
1,一般在/usr/local/src下,执行wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz
2,解压 tar -zxf redis-2.6.14.tar.gz 然后切换到这个目录。
3,make
4,一般到/etc/sysctl.conf里添加vm.overcommit_memory=1,然后reboot,这样会允许分配所有内存避免不能启动redis。
5,在redis.conf中修改一下配置,最重要的是修改如下:
daemonize yes
把它转换成驻守进程,其余配置请参考手册。
6,redis-server redis.conf启动redis,如果没有redis-server命令,可以把src下面的redis-*都复制到/usr/bin目录下
7,redis-cli启动客户端测试启动是否正常。
PHP-REDIS客户端安装,参考:https://github.com/nicolasff/phpredis
©DZ插件网所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 本站内容为站长个人技术研究记录或网络,不提供用户交互功能,所有内容版权归原作者所有。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,得到更好的正版服务。 您在本站任何的赞助购买、下载、查阅、回复等行为等均表示接受并同意签订《DZ插件网免责声明协议》。 如有侵权请邮件与我们联系处理: discuzaddons@vip.qq.com 并出示相关证明以便删除。敬请谅解!
|
|