首頁  >  文章  >  後端開發  >  swoole http server 實作跳轉功能,且程式可以不繼續往下執行

swoole http server 實作跳轉功能,且程式可以不繼續往下執行

WBOY
WBOY原創
2016-10-11 14:23:331855瀏覽

使用swoole_http_response方法header,status,end可以實現跳轉

程式碼如下 

<code>  public function redirect($url)
    {
        $this->header("Location", $url);
        $this->status(302);
        return $this->end('');
    }</code>

但使用redirect()後,程式沒有中斷,還是繼續往下執行,

後來我用拋出異常的方法中斷了程序,不讓他繼續往後執行,不過這樣的方法造成worker重啟,

問題: 有沒有好的辦法,頁面跳轉後,程式就馬上中斷,不會繼續執行,頁面馬上跳轉?要求不使用拋出異常的方法中斷程序

回覆內容:

使用swoole_http_response方法header,status,end可以實現跳轉

程式碼如下 

<code>  public function redirect($url)
    {
        $this->header("Location", $url);
        $this->status(302);
        return $this->end('');
    }</code>

但使用redirect()後,程式沒有中斷,還是繼續往下執行,

後來我用拋出異常的方法中斷了程序,不讓他繼續往後執行,不過這樣的方法造成worker重啟,

問題: 有沒有好的辦法,頁面跳轉後,程式就馬上中斷,不會繼續執行,頁面馬上跳轉?要求不使用拋出異常的方法中斷程序

本來想說 exit(0)的 ,感覺有點不對

沒用過swoole , 剛才看了一下swoole 的文檔 ,

swoole_http_response->end
發送Http回應體,並結束請求處理。
swoole_http_response->end(string $html);
end操作後將向客戶端瀏覽器發送HTML內容,並銷毀$request/$response物件
如果開啟了KeepAlive,連線將會保持,伺服器會等待下次要求
未開啟KeepAlive,伺服器將會切斷連線

end() 之後 $response 物件被銷毀 , http的回應算是完成了 , 業務代碼應該也不會執行了.

http://wiki.swoole.com/wiki/p...
可以理解為reactor就是nginx,worker就是php-fpm。 reactor執行緒非同步並行地處理網路請求,然後再轉送至>worker進程中去處理。 reactor和worker間透過IPC方式通訊。

swoole的reactor,worker,task_worker之間可以緊密的結合起來,提供更高級的使用方式。

一個更通俗的比喻,假設Server就是一個工廠,那reactor就是銷售,幫你接項目訂單。而worker就是工人,當銷>售接到訂單後,worker去工作生產出客戶要的東西。而task_worker可以理解為行政人員,可以幫助worker做些雜>事,讓worker專心工作。

woker重啟好像沒什麼影響.

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn