异步PHP请求


Async PHP requests

所以,我想在PHP中创建一个异步web服务。为什么?因为我有一个不错的异步前端,但Chrome会阻止我的请求,如果我有超过6个活跃的TCP连接。当然,我也读过一些类似的问题,比如:

    PHP中的异步请求多个PHP请求导致页面崩溃

但是这些并没有涵盖我的问题。

我安装pthreads的意图,我将能够使多个请求在不同的线程,使我的PHP不阻止其他请求(在我的情况下,我开始eg。一个漫长的过程,我希望能够投票,如果过程仍然很忙或不)。

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'); 

理想的情况是使用回调。

p。我见过一些提供此功能的服务器(如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();
}

Request线程将在控制返回给__construct (new)的调用者之前被连接,因为变量超出了作用域,因此被销毁(连接是销毁的一部分)。