PHP如何請求url之後不需要等待url傳回值,直接執行後面代碼?

來源:互聯網
上載者:User
最近開發中遇到這麼一個問題,程式第4行會請求一個url,但是這個url的回應時間很長,而且我的程式中用不到他的傳回值,所以我在想能不能在第4行發送請求之後不用等待他傳回值,直接執行第5行代碼,可以嗎?如果可以的話,怎麼做到?

回複內容:

最近開發中遇到這麼一個問題,程式第4行會請求一個url,但是這個url的回應時間很長,而且我的程式中用不到他的傳回值,所以我在想能不能在第4行發送請求之後不用等待他傳回值,直接執行第5行代碼,可以嗎?如果可以的話,怎麼做到?

http://www.laruence.com/2008/04/14/318.html

sleep(10)這個長達10秒的操作由正在提供Web服務的PHP進程來處理顯然是不合適的,因為這肯定會造成一個PHP背景工作處理序被阻塞.這時可以考慮用popen或proc_open非同步呼叫一個CLI程式進行一些耗時的操作.

/www/index.php

如果你用不到這個返回,你可以直接把這個地址存到資料庫,由別的程式在伺服器上執行

要是用php-fpm可以看看這個函數fastcgi_finish_request
你把運行慢的代碼寫在這個函數之後就可以了
http://php.net/manual/zh/function.fastcgi-finish-request.php

可以使用 php 非同步擴充 swoole.

  1. 可以用多線程,pthread擴充,http://php.net/manual/en/book.pthreads.php

  2. 把請求操作放在隊列中,非同步執行

 array(      'timeout' => 5     ) ));  $contents = file_get_contents('http://www.google.com', 0, $context);echo '5秒後到這'?>

用隊列請求
用隊列請求
用隊列請求

這肯定是不可以的 !

要麼你使用隊列執行 .
要麼 你用 swoole 或者 Node.js

PHP 在設計上就決定了 , 它只能從頭到尾執行 。

生產者/消費者模式

簡單粗暴的寫法,可以把這個邏輯用register_shutdown_function()執行

你不需要返回一個請求的內容 你去請求他幹啥。。。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.