久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
Discuz! 官方交流社區(qū)
標(biāo)題:
DISCUZX3/X25論壇云上報(bào)/計(jì)劃任務(wù)異步機(jī)制方案1.0.2beta[7.22日...
[打印本頁]
作者:
dashen
時(shí)間:
2022-4-20 15:17
標(biāo)題:
DISCUZX3/X25論壇云上報(bào)/計(jì)劃任務(wù)異步機(jī)制方案1.0.2beta[7.22日...
DISCUZX3/X25論壇云上報(bào)/計(jì)劃任務(wù)異步機(jī)制方案1.0.2beta[7.22日更新]
7.22日更新
1,優(yōu)化超時(shí)問題
2,修正一個(gè)Exception錯(cuò)誤
很多站長(zhǎng)開啟了防水墻等功能,在每次發(fā)帖的時(shí)候都會(huì)同步請(qǐng)求云端,這樣當(dāng)網(wǎng)絡(luò)不暢的時(shí)候很容易導(dǎo)致“卡頓”的情況出現(xiàn)影響用戶體驗(yàn)。
同理,論壇的計(jì)劃任務(wù)也是把論壇后臺(tái)的各種任務(wù)附加到用戶的訪問動(dòng)作上,給用戶造成論壇突然很卡了的假象。
于是,我們開發(fā)了這個(gè)論壇的異步機(jī)制來處理這個(gè)問題。
什么是異步?:
(, 下載次數(shù): 43)
上傳
點(diǎn)擊文件名下載附件
在執(zhí)行過程中,我們把那些會(huì)造成卡的部分分離出來,放到后臺(tái)來執(zhí)行。
方案原理:
我們借助redis的隊(duì)列機(jī)制的BLPOP方法,在一個(gè)死循環(huán)中等待隊(duì)列中的可彈出的元素,否則就阻塞連接。
在后臺(tái)處理前臺(tái)提交過來的上報(bào)任務(wù)。
方案前提:
1,獨(dú)立服務(wù)器,能執(zhí)行命令行,并且安裝了redis服務(wù)以及php-redis擴(kuò)展。
2,服務(wù)器能執(zhí)行計(jì)劃任務(wù)。
實(shí)施步驟:
1,到
http://www.9999xn.com/thread-12045-1-1.html
按提示安裝框架。如果已經(jīng)安裝好可跳過此步。
2,關(guān)閉論壇,此過程大約需要5~15分鐘。
3,確保論壇已經(jīng)安裝好redis以及php-redis擴(kuò)展,如果沒有安裝可以參考帖子下方的方法。
4,下載帖子中的附件,并上傳到服務(wù)器(不會(huì)覆蓋任何文件)
5,切換到extend/bin目錄,執(zhí)行如下命令:
~$nohup php bin_async_cron.php&
復(fù)制代碼
6,在配置文件的最下方加入如下配置:
$_config['extend']['asynctask']['on'] = 1;
復(fù)制代碼
在配置文件中找到如下兩項(xiàng)按如下配置:
$_config['remote']['on'] = '1';
$_config['remote']['cron'] = '1';
復(fù)制代碼
7,執(zhí)行命令:
~$crontab -e
復(fù)制代碼
添加如下代碼到最后一行
* * * * * curl "http://你的站/api/remote/index.php?mod=cron"
復(fù)制代碼
8,可以到bin目錄下查看out文件,里面記錄了云上報(bào)日志,如果發(fā)現(xiàn)里面的剩余成員數(shù)一直在增加可以再次執(zhí)行步驟5,新增一個(gè)進(jìn)程來執(zhí)行。
注意事項(xiàng):
1,為了避免重啟后任務(wù)丟失,建議把步驟5添加到開機(jī)啟動(dòng)里。
2,由于linux計(jì)劃任務(wù)最多每分鐘執(zhí)行一次,所以論壇的任務(wù)執(zhí)行可能有所延后而不是準(zhǔn)點(diǎn)執(zhí)行,比如今日發(fā)帖的任務(wù)可能就不是準(zhǔn)點(diǎn)更新而是延后了幾分鐘。
3,請(qǐng)限制extend/bin目錄只能本機(jī)訪問,尤其是該腳本存在死循環(huán),一定不要在瀏覽器下執(zhí)行。
linux系統(tǒng)安裝redis服務(wù)簡(jiǎn)單步驟:
1,一般在/usr/local/src下,執(zhí)行wget
http://redis.googlecode.com/files/redis-2.6.14.tar.gz
2,解壓 tar -zxf redis-2.6.14.tar.gz 然后切換到這個(gè)目錄。
3,make
4,一般到/etc/sysctl.conf里添加vm.overcommit_memory=1,然后reboot,這樣會(huì)允許分配所有內(nèi)存避免不能啟動(dòng)redis。
5,在redis.conf中修改一下配置,最重要的是修改如下:
daemonize yes
把它轉(zhuǎn)換成駐守進(jìn)程,其余配置請(qǐng)參考手冊(cè)。
6,redis-server redis.conf啟動(dòng)redis,如果沒有redis-server命令,可以把src下面的redis-*都復(fù)制到/usr/bin目錄下
7,redis-cli啟動(dòng)客戶端測(cè)試啟動(dòng)是否正常。
PHP-REDIS客戶端安裝,參考:
https://github.com/nicolasff/phpredis
(, 下載次數(shù): 212)
上傳
點(diǎn)擊文件名下載附件
歡迎光臨 Discuz! 官方交流社區(qū) (http://www.9999xn.com/)
Powered by Discuz! W1.0