跨本地PM2集群(NodeJS)的NPM模块中的静态上下文

时间:2017-01-20 09:54:21

标签: javascript node.js pm2

我正在处理并想知道微服务后端中的上下文问题(和可能性),并且我试图更好地理解NodeJS分叉集群实例之间的确切共享(例如使用PM2)。

情况 - 假设我有一个名为NPM的软件包导出其自身的一个实例,如:

class Content {

constructor(){
   if(!Content.Registry) Content.Registry = {};
}

registerStatic(key,obj) {
    Content.Registry[key] = obj;
}
getStatic(key){
    return Content.Registry[key];
}
}

module.exports = new Content();

我的Node应用程序在几个点包含此模块,并使用静态上下文方法注册多个对象的实例。 现在,我知道Node需要注册表会在需要包时缓存实例(或者可能采用更适合节点文档的措辞 - 它可能会“带来相同的缓存实例”。

提出的问题:

  1. 我可以依靠缓存的包吗?我要求它作为NPM模块而不是文件(require('package-name'))

  2. 即使从require注册表返回的实例不一样 - 静态上下文在同一个PID中是否相同? (Content.Registry)

  3. 使事情变得更复杂 - 当在PM2上运行整个事情时 - 每个分叉子PID将具有不同的包实例和静态上下文吗?静态上下文会被保留吗?我已经注意到Node共享一些资源(通过IPC共享套接字是有记录的,但我们发现甚至文件句柄在尝试从不同的PM2实例写入同一文件时也是共享的 - 逻辑上说每个人都会尝试获取一个锁定文件上的句柄但只有一个会成功。实际上它们都在一起写 - 这是使用winston完成的)
  4. 感谢您的帮助!

    编辑:有没有办法测试这个?我可以以某种方式在NPM包中访问一些节点/ javascript功能,这些功能会给我一些包的实例的UUID吗?记忆地址?

0 个答案:

没有答案