gpt4 book ai didi

javascript - Node 的事件循环是否意味着我需要重新考虑用户变量存储?

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:54 24 4
gpt4 key购买 nike

我刚刚遇到了一个困惑的地方,思考 Node 为每个用户提供服务的方式。

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

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

//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');

variableOne 是全局的,因为 Node.js 在启动期间只会遍历变量的声明一次。该变量在 scipt 中随处可用,因此每个请求/用户都可以更改它。

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

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

再一个简化的例子:

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 - Node 的事件循环是否意味着我需要重新考虑用户变量存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22169197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com