gpt4 book ai didi

variables - Node.js 模块变量是否在多个调用之间共享?

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:37 24 4
gpt4 key购买 nike

我正在创建一个node.js服务器,其中有一个“通知”模块。 Node 服务器上的每个请求都将调用此模块,并且我需要为每个单独的调用提供一组私有(private)变量。

例如,当向通知模块发出请求时,它需要记住用户id、请求时间、 session id等。

我怎样才能有效地做到这一点?

如果我简单地在模块范围内声明变量,它们似乎会为每个模块调用共享。因此,它无法私下记住每个请求的数据。

我需要的是每次调用node.js模块时,它都会记住当时的数据。那么,请指出我该如何做到这一点?

谢谢,
安扬

更新

node.js 服务器用作聊天服务器。 “通知”模块将扫描数据库中的新消息,并使用长轮询技术将 json 格式的输出发送到客户端。

我尝试将数据和函数包装到一个对象中。然后,每次向聊天服务器发出请求时,都会创建一个新对象,并将执行所需的功能。但它所做的是,不是并行工作,而是串行执行每个请求。因此,如果我向服务器发出 3 个请求,它们就会排队并一个接一个地执行。

有什么线索吗?

模块源代码可以在这里找到:http://www.ultrasoftbd.com/notifications.js

谢谢,安扬

最佳答案

有几种方法可以解决这个问题:

1) 让您的模块导出一个构造函数,该构造函数可以由您模块的 API 用户调用,为他们提供对象的新实例。这样,每个用户都会有自己的对象实例,该实例有自己的私有(private)变量。

// Client example.
var mod = require('myModule')
, sess = new mod.Session();
sess.method(args);
sess.finalize();

2) 让您的模块为这些私有(private)变量提供一个“注册表”接口(interface),其中包含调用者唯一的标识符。

// Client example.
var mod = require('myModule');
var id = mod.initialize(); // Returns a unique ID.
mod.method(id, args); // Each method requires the ID.
mod.finalize(id);

这些解决方案的共同理念是,每个实例(或 ID)均由您的模块单独跟踪,以便可以按客户端实例计算统计信息(或您的模块执行的任何操作),而不是在全局范围内计算模块。

关于variables - Node.js 模块变量是否在多个调用之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403405/

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