与Node.js服务器和PHP服务器之间的差异之间的理论混淆


Confusion with theory between the differences of Node.js servers and PHP servers

我已经能够在node.js和php中编写应用程序一段时间了,但是只是真正发现了一个奇怪的差异,我觉得我仍然不完全理解。

我想我已经注意到的区别在于,假设我们必须访问由 php 运行的 Web 应用程序的客户端,它们将在后端拥有两个完全不同的所有数据实例(变量数组等)。在节点.js中,它们并不完全。

这是我为避免一些混乱而做的测试:

PHP测试

前端 JS

$.post("/ajax.php", {test:"test"}, function(result){
    console.log(result);
});

阿贾克斯.php

$testarr = array();
if(isset($_POST['test'])){
    $testarr[] = $_POST['test'];
    print_r($testarr);
}

。在此示例中,如果我在两个不同的浏览器中访问应用程序,甚至在同一客户端中访问该应用程序,前端控制台将始终输出一个包含单个元素的数组。因此,数组基本上在刷新/新请求时重置。

节点.js测试

前端 JS

$.post("/test", {test:"test"}, function(result){
    console.log(result);
});

应用.js

var testarr = [];
app.post("/test", function(req, res){
    testarr.push(req.body.test);
    console.log(testarr);
});

但是,在这里,当我甚至从不同的浏览器刷新页面时,数组不会重置,并且我最终在每个请求上都得到 ["test"、"test"、"test" 等]。来自两个不同浏览器的两个不同客户端如何像这样访问同一个数组?通常数据必须通过数据库,特殊要求等共享,对吗?

我显然误解了节点的一些大哲学.js我希望任何人有一个很好的解释。

不同之处在于 PHP 为每个请求创建一个新环境,而 node.js 则没有。

我不是最大的 PHP gury,但我认为你覆盖了你的 PHP 数组而不是推入新元素。您可以使用 array_push() 向您的 testarr 添加一些内容。