Heim  >  Artikel  >  Backend-Entwicklung  >  swoole http server 实现跳转功能,并且程序可以不继续往下执行

swoole http server 实现跳转功能,并且程序可以不继续往下执行

WBOY
WBOYOriginal
2016-10-11 14:23:331821Durchsuche

使用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重启好像没什么影响.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn