首頁  >  問答  >  主體

非同步請求 - php有辦法做類似js的非同步post嗎? fsockopen沒有辦法取得請求結果

在做大量發送郵件的操作,要取得發送結果,所以需要等待請求結果。

php有沒有辦法非同步請求接口,然後取得數據,再執行回調函數?

現在是同步請求接口,然後等待,很慢。 。而且執行的時候伺服器cpu會升高。 。

求大神賜教

現在的重點是不想等待請求的返回,因為很慢,等有返回的時候直接調用某段程式碼。 。 redis隊列什麼的已經在用了,也是腳本在執行

过去多啦不再A梦过去多啦不再A梦2679 天前720

全部回覆(5)我來回復

  • 高洛峰

    高洛峰2017-05-27 17:44:08

    php安裝多執行緒擴充。自己擴展即可達到,js也是單線程實現的。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-27 17:44:08

    可以嘗試使用reactphp,workerman,swoole這些函式庫來執行非同步任務

    回覆
    0
  • 怪我咯

    怪我咯2017-05-27 17:44:08

    php自帶的curl_multi就可以實現了

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-27 17:44:08

    強烈推薦你使用workerman,如果使用了fsockopen,這個只是講異步發出去了,但是並沒有返回回來!如果你要異步處理,就用workerman.當然swoole也可以的,但是呢,這個有C語言的,有些報錯訊息是C的。你會C你也可以用這個。 workerman入門特簡單。具體的實作邏輯如下:
    當你需要異步的時候,你直接調用workerman,來執行你的邏輯,這個workerman這裡是同步執行的,
    workerman執行邏輯過後,通過異步的方式來調用task任務,這個是workerman的異步。 workerman直接返回。
    當你的task任務搞定了過後,就講傳遞到workerman中,在由workerman來執行你異步之後的邏輯。
    給你一個備份裡面有PHP非同步通訊的框架
    github-php-awesome 翻譯過後的

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-27 17:44:08

    隊列

    1.把需要傳送的資訊存到Redis或其他記憶體快取裡面。

    2.php提供一個需要存取密鑰token的接口,這個接口便是循環的讀取緩存redis裡面得郵件數據,去發送。

    3.使用定時任務windows和linux均有方案,定時去http請求這個php接口,完成發送。也相當於就是異步了。

    回覆
    0
  • 取消回覆