【问题标题】:Confusion with theory between the differences of Node.js servers and PHP serversNode.js服务器和PHP服务器的区别与理论混淆
【发布时间】:2016-06-27 18:58:56
【问题描述】:

我已经能够在 node.js 和 php 中编写应用程序有一段时间了,但是我才真正发现了一个奇怪的区别,我觉得我还没有完全理解。

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

这是我做的一个测试,试图避免一些混乱:

PHP 测试

前端js

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

ajax.php

$testarr = array();

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

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

Node.js 测试

前端js

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

app.js

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

然而,当我从不同的浏览器刷新页面时,数组不会重置,并且每个请求都会得到 ["test", "test", "test", etc]。来自两个不同浏览器的两个不同客户端如何访问同一个数组?通常数据必须通过数据库、特殊请求等共享,对吧?

我显然误解了 node.js 的一些重要理念,如果有人能提供很好的解释,我将不胜感激。

【问题讨论】:

  • 在节点 JS 中,你“继续运行”。变量只是一个变量,就像在页面上一样,它一直存在,直到您重新加载。这就是为什么 node 在很多任务上都比 php 好得多的原因:它几乎不需要 apache+php 的每个连接开销。这也是为什么您需要小心传递私人数据的原因。

标签: javascript php jquery node.js server


【解决方案1】:

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

【讨论】:

  • $testarr[] = "test" 也一样 :)
  • 在那种情况下我错了:)。谢谢指正!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多