繁体   English   中英

异步PHP请求

[英]Async PHP requests

因此,我想在PHP中创建一个异步Web服务。 为什么? 因为我有一个不错的异步前端,但是如果我有6个以上的活动TCP连接,Chrome就会阻止我的请求。 当然,我读过一些类似的问题,例如:

但是这些并不能解决我的问题。

我安装pthreads的目的是我可以在不同的线程中发出多个请求,以便我的PHP不会阻止其他请求(在我的情况下,我启动了一个长进程,例如,我希望能够轮询该进程还是很忙)。

PHPReact似乎是一个不错的库(非阻塞I / O,异步),但是它也不起作用(仍然同步)。

我是否缺少某些东西,或者今天在PHP中还是无法实现?

class Example{
    private $url;   
    function __construct($url){
        $this->url = $url;
        echo 'pooooof request to ' . $this->url . ' sent <br />';
        $request = new Request($this->url);     
        $request->start();
    }
}

class Request extends Thread{
    private $url;   
    function __construct($url){
        $this->url = $url;
    }

    function run(){
        // execute curl, multi_curl, file_get_contents but every request is sync
    }
}

new Example('https://gtmetrix.com/why-is-my-page-slow.html');
new Example('http://php.net/manual/en/function.file-get-contents.php');
new Example('https://www.google.nl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=php%20file%20get%20contents'); 

理想的情况是利用回调。

ps。 我已经看到一些提供此功能的服务器(例如Node.js),但我更喜欢本机方法。 当这不可能时,我真的在考虑切换到Python,Java,Scala或其他支持异步的语言。

我真的无法理解你在做什么...

  • 异步和并行是不可互换的词。
  • Web应用程序前端的线程没有任何意义。
  • 您不需要线程来使许多I / O绑定的任务并发。 这就是非阻塞I / O的目的(异步并发)。
  • 并行并发似乎在这里是过分的。

无论如何,您的请求出现同步的原因是此构造函数的编写方式:

function __construct($url){
    $this->url = $url;
    echo 'pooooof request to ' . $this->url . ' sent <br />';
    $request = new Request($this->url);     
    $request->start();
}

在控制权返回给__construct (新)的调用者之前,将连接Request线程,因为该变量超出范围,因此被破坏(联接是破坏的一部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM