是否可以在PHPV8JS上创建非阻塞javascript代码?

是否可以在PHPV8JS上创建非阻塞javascript代码?,php,node.js,asynchronous,v8,nonblocking,Php,Node.js,Asynchronous,V8,Nonblocking,情景: 我想在PHP上运行非阻塞/异步代码,用户发出请求并接收一个202接受的代码,然后继续执行其他任务——但PHP会继续执行。我见过一些使用ob_flush和Connection:close的解决方案/黑客,但新的浏览器似乎不允许这样做,只显示最终结果。此外,这似乎不是一个合适的解决方案 我知道PHP是通过设计单线程语言实现的,我不想说多线程PHP,但我相信有解决方案可以完成这项工作。我目前正在考虑使用AMQP或STOMP(RabitMQ)来抵消其他工作程序的长时间运行执行,尽管我觉得PHP仍

情景:

我想在PHP上运行非阻塞/异步代码,用户发出请求并接收一个
202接受的
代码,然后继续执行其他任务——但PHP会继续执行。我见过一些使用
ob_flush
Connection:close
的解决方案/黑客,但新的浏览器似乎不允许这样做,只显示最终结果。此外,这似乎不是一个合适的解决方案

我知道PHP是通过设计单线程语言实现的,我不想说多线程PHP,但我相信有解决方案可以完成这项工作。我目前正在考虑使用AMQP或STOMP(RabitMQ)来抵消其他工作程序的长时间运行执行,尽管我觉得PHP仍将等待工作程序响应(我仍在研究它,似乎有一种单向的消息处理方法;请原谅我目前没有掌握适当的知识)

然而。。。以下是我的实际问题:

我很想尝试PHP V8js,但在我进入许多配置步骤之前,我有三个问题:

以非阻塞方式编写的Javascript函数是否会生成非阻塞PHP脚本

例如:

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT

setInterval(function(){print("Hello")},3000); 

EOT;

try {
  var_dump($v8->executeString($JS, 'basic.js'));
  echo "World";
  exit();
} catch (V8JsException $e) {
  var_dump($e);
}

?>

在上面的代码中,“Hello”设置为3秒后显示:PHP是否等待JS代码的完全执行,然后回显“World”?或者它是否响应“World”并终止脚本——但让JS运行?另一个例子可能是对JS代码的异步ajax调用:PHP会等待完整的操作然后继续,还是会继续,终止脚本(给用户),但在后台继续处理JS代码(当然,不能向用户输出任何内容)

第二个问题:在同一台机器上安装PHP+v8lib和Nodejs可以吗

第三:如果PHP+V8js解决方案是阻塞/同步的,您会推荐什么作为PHP的非阻塞/异步解决方案(如果有的话)

编辑 我已经用V8js运行了一个快速测试,可以看出上面的代码根本不起作用。您收到一个
ReferenceError:setInterval未定义
错误。似乎有必要注册extensions(),但由于可用的文档太差,而且Nodejs在包方面要高级得多,我不确定是否会继续尝试使用V8js


尽管如此,我仍在为PHP寻找良好的异步解决方案。关于这个问题,我将发布一个单独的、有针对性的问题。

我不知道V8js,但是如果你想做异步编程。在PHP中,看一看PHP


添加作为答案,因为我还不能评论。

首先,
ReferenceError
是因为
setInterval
实际上是
窗口。setInterval
,一种浏览器内部的方法

V8不具有、也不公开DOM。没有DOM,没有
window
对象,因此没有
window.setInterval()
方法

对于V8Js,V8Js扩展将等待脚本执行完成或超时。该扩展的最新版本已被破坏(现在可能已修复),现在在脚本超过其限制时抛出错误。还有一个问题

普里塔姆提到。这,或者说,对于你想要做的事情来说,也是一个很好的选择


我也觉得这很有趣。这是在上述超时被释放之前发生的。还是一本好书

听起来很有趣。我去查一下。在结束这个问题之前,我将等待一段时间。