我只是想到了节点为每个用户提供服务的方式,这让我感到困惑。
根据我的有限理解,使用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,当一个新用户连接时,他将被处理一个新的重置环境..
这可能不完全正确,但我认为我看到的是我需要在客户端保留所有与用户相关的数据,并将客户端和服务器之间的所有内容作为包传递,而不是保留服务器端存储的任何用户数据。
我是否在这里,完全困惑,还是有更好的方式来考虑这个?
答案 0 :(得分:1)
这一切都取决于变量的范围(创建它的位置)。考虑这个简单而简化的例子:
var http = require('http');
var variableOne = "foobar";
http.createServer(function (req, res) {
var variableTwo = "barfoo";
}).listen(1337, '127.0.0.1');
variableOne
有点全局,因为node.js在启动时只会通过变量声明一次。该变量在scipt中的任何位置都可用,因此每个请求/用户都可以更改它。
variableTwo
。有可能,这个变量有多个版本。
处理永久用户数据时,您需要以某种方式存储它,以便以后的请求访问它,但对用户来说是唯一的。
再一个简化的例子:
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地址将保存some unique user data
。您可以稍后通过检查以前是否使用过IP地址来读取数据。这不是很实用,但应该给你一个想法。在现实世界的示例中,您将为每个用户生成一个唯一的cookie。