php非同步實現

來源:互聯網
上載者:User
php本身是沒有非同步,但我們經常會需要處理一些耗時操作,如公號推送給所有使用者。試過很多方法都沒有做到,每一條推送一個網路請求,curl每次好像最少一秒,請求次數多肯定不行。fscokopen post json資料沒解決,一直出現post data empty,請各路高手支招,給一些解決方案!

回複內容:

php本身是沒有非同步,但我們經常會需要處理一些耗時操作,如公號推送給所有使用者。試過很多方法都沒有做到,每一條推送一個網路請求,curl每次好像最少一秒,請求次數多肯定不行。fscokopen post json資料沒解決,一直出現post data empty,請各路高手支招,給一些解決方案!

耗時操作就不用放在web上了,你可以用php寫指令碼把耗時操作放進去,然後web上面通過執行指令碼並忽略輸出達到非同步效果,這是我使用的方法,如果你看到有更好的回答,記得 @ 我看一下哈哈哈。下面是範例程式碼:

pclose(popen('/usr/local/php5/bin/php tmp.php &', 'r'));// 繼續你的代碼

可以使用gearman for php

或者swoole 來處理。

可以用訊息佇列

訊息佇列處理耗時任務, gearman php-resque
或者 fastcgifinishrequest

可以藉助用 redis的隊列,實現逐步推送的功能。裡面實現的原理比較簡單, redis執行的速度很快的

把耗時的任務儲存到資料庫,然後專門寫一個PHP CLI進程迴圈處理資料庫裡的任務.
這些耗時的任務不應該在Web上(MOD_PHP,PHP-FPM)執行,以免影響Web服務.

php+rabbitmq,”公號推送給所有使用者“作為一個單獨模組,每次需要發送訊息可以放到訊息佇列裡,之後的都交給rabbitmq處理

同上,php+rabbitmq,”公號推送給所有使用者“作為一個單獨模組,每次需要發送訊息可以放到訊息佇列裡,之後的都交給rabbitmq處理

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.