Javascript 节点';s事件循环意味着我需要重新考虑用户变量存储?

Javascript 节点';s事件循环意味着我需要重新考虑用户变量存储?,javascript,node.js,Javascript,Node.js,我只是在思考节点为每个用户提供服务的方式时遇到了一个困惑 根据我有限的理解,使用PHP,为每个用户创建了一个新的(线程?)环境,因此我的脚本只需要关注一个单独的用户,这将适用于每个用户 现在,从我对节点的有限理解来看,一个事件循环正在处理我的所有用户。例如,在这个脚本片段中 //imaginary script to validate user's post to server (log-in attempt) next: console.log('user logged in success

我只是在思考节点为每个用户提供服务的方式时遇到了一个困惑

根据我有限的理解,使用PHP,为每个用户创建了一个新的(线程?)环境,因此我的脚本只需要关注一个单独的用户,这将适用于每个用户

现在,从我对节点的有限理解来看,一个事件循环正在处理我的所有用户。例如,在这个脚本片段中

//imaginary script to validate user's post to server (log-in attempt) next:

console.log('user logged in successfully!');

var username =  req.body.username;

//imaginary script that takes the username and processes it somehow, using my username variable
如果另一个用户在上次用户之后登录,那么
username
变量将被覆盖,现在一切都乱七八糟。而对于PHP,当一个新用户连接时,他将被一个新的重置环境处理

这可能并不完全正确,但我认为我看到的是,我需要将所有与用户相关的数据保存在客户端,并将所有数据作为一个包在客户端和服务器之间传递,而不是将任何用户数据保存在服务器端


我是完全迷糊了,还是有更好的方法来思考这个问题?

这一切都取决于变量的范围(它是在哪里创建的)。考虑这个简单和简化的例子:

var http = require('http');

var variableOne = "foobar";

http.createServer(function (req, res) {

    var variableTwo = "barfoo";

}).listen(1337, '127.0.0.1');
var http = require('http');

var userData = {};

http.createServer(function (req, res) {

    userData[request.connection.remoteAddress] = "some unique user data";

}).listen(1337, '127.0.0.1');
variableOne
有点全局性,因为node.js在启动时只执行一次变量声明。该变量在scipt中随处可见,因此每个请求/用户都可以对其进行更改

为node.js处理的每个请求创建
variableTwo
。此变量可能有多个版本

在处理永久用户数据时,您需要以某种方式存储数据,该数据在以后的请求中可以访问,但对用户来说是唯一的

同样是一个简化的例子:

var http = require('http');

var variableOne = "foobar";

http.createServer(function (req, res) {

    var variableTwo = "barfoo";

}).listen(1337, '127.0.0.1');
var http = require('http');

var userData = {};

http.createServer(function (req, res) {

    userData[request.connection.remoteAddress] = "some unique user data";

}).listen(1337, '127.0.0.1');

它将为每个IP地址保存一些独特的用户数据。您可以稍后通过检查IP地址以前是否使用过来读取数据。这不是很实际,但应该给你一个想法。在一个真实的例子中,您将为每个用户生成一个唯一的cookie。

没错,但我的变量只适用于存储一个进程(函数调用)的用户数据,因此这意味着一旦处理了我的函数,我需要假设所有变量都是未知的/被覆盖的。噢,哇。。我几乎用一句话结束了最后一句。。。今天javascript太多了,哈哈。因为你来自PHP世界,我想你会喜欢一些HTML页面的东西吧?如果是,请查看.Ok,这样我就可以存储在线服务器长度的动态用户数据。。但为了简单起见,我不应该这样做吗?似乎编写脚本来处理服务器崩溃/重新启动的可能性需要做更多的工作。在需要的地方将所有数据打包到每个ajax调用中可能会增加服务器上的负载,但从简单性的角度来看似乎更安全。你确实回答了我的问题。我有正确的想法哦,是的,我被介绍在Node中立即表达,尽管我不知道它到底是什么。我刚刚通过教程使用过它