香蕉成人伊视频在线观看|学生小视频国产区|yy女主播啪啪啪视频|麻豆传播媒体APP大全免费版官网|瑜伽牲交AV|国产欧美日韩在线天堂区|白浆精品国产91

Discuz! 官方交流社區

標題: DISCUZX3/X25論壇云上報/計劃任務異步機制方案1.0.2beta[7.22日... [打印本頁]

作者: dashen    時間: 2022-4-20 15:17
標題: DISCUZX3/X25論壇云上報/計劃任務異步機制方案1.0.2beta[7.22日...
DISCUZX3/X25論壇云上報/計劃任務異步機制方案1.0.2beta[7.22日更新]


7.22日更新
1,優化超時問題
2,修正一個Exception錯誤


很多站長開啟了防水墻等功能,在每次發帖的時候都會同步請求云端,這樣當網絡不暢的時候很容易導致“卡頓”的情況出現影響用戶體驗。

同理,論壇的計劃任務也是把論壇后臺的各種任務附加到用戶的訪問動作上,給用戶造成論壇突然很卡了的假象。
于是,我們開發了這個論壇的異步機制來處理這個問題。


什么是異步?:
(, 下載次數: 66)
在執行過程中,我們把那些會造成卡的部分分離出來,放到后臺來執行。

方案原理:
我們借助redis的隊列機制的BLPOP方法,在一個死循環中等待隊列中的可彈出的元素,否則就阻塞連接。
在后臺處理前臺提交過來的上報任務。

方案前提:
1,獨立服務器,能執行命令行,并且安裝了redis服務以及php-redis擴展。
2,服務器能執行計劃任務。

實施步驟:
1,到 http://m.yu-jie.cn/thread-12045-1-1.html 按提示安裝框架。如果已經安裝好可跳過此步。
2,關閉論壇,此過程大約需要5~15分鐘。
3,確保論壇已經安裝好redis以及php-redis擴展,如果沒有安裝可以參考帖子下方的方法。
4,下載帖子中的附件,并上傳到服務器(不會覆蓋任何文件)
5,切換到extend/bin目錄,執行如下命令:
  1. ~$nohup php bin_async_cron.php&
復制代碼
6,在配置文件的最下方加入如下配置:
  1. $_config['extend']['asynctask']['on'] = 1;
復制代碼
在配置文件中找到如下兩項按如下配置:
  1. $_config['remote']['on'] = '1';
  2. $_config['remote']['cron'] = '1';
復制代碼
7,執行命令:
  1. ~$crontab -e
復制代碼
添加如下代碼到最后一行
  1. * * * * * 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

(, 下載次數: 389)






歡迎光臨 Discuz! 官方交流社區 (http://m.yu-jie.cn/) Powered by Discuz! X5.0