【问题标题】:I want to set values for array in one process and access it in another process nodejs我想在一个进程中为数组设置值并在另一个进程 nodejs 中访问它
【发布时间】:2017-08-23 21:48:42
【问题描述】:
 main.js
var sendTickets = []

code1.js
for(i=0;i<100;i++){
sendTickets.push(i);
}

code2.js
sendTickets.forEach(function(element){console.log(element);})

我在main.js 中设置数组变量sendTickets。我想在code1.js 中填充该数组并将其显示在code2.js 中。 nodejs可以吗?

【问题讨论】:

  • 有很多 IPC(进程间通信)解决方案,但您需要更具体地了解您想要实现的确切。您的示例太简单了,因此没有多大意义。
  • 不是我不想要没有IPC的IPC我想做。
  • 我的意思是一般的 IPC,而不是特定的东西。您需要某种形式的 IPC,因为您要处理不同的进程...
  • 如果我设置 global.sendTickets = [] 也不起作用
  • 因为 NodeJS 不能跨进程共享变量。

标签: arrays node.js global


【解决方案1】:

你可以使用全局作用域,因为 JS 是单线程运行时,你甚至不会面临任何竞争条件。

main.js:
global.sendTickets = []

code1.js
for(i=0;i<100;i++){
global.sendTickets.push(i);
}

code2.js
global.sendTickets.forEach(function(element){console.log(element);})

【讨论】:

  • global 不跨进程共享。他们不仅将代码拆分为单独的文件,还拆分了进程。
  • 那么有没有其他解决方案
  • @hariprasad 就像我说的:IPC。 process.send()、Redis、ØMQ、RabbitMQ、Kafka、NSQ,任君挑选。
【解决方案2】:

Redis

Redis 是一种开源(BSD 许可)的内存数据结构 store,用作数据库、缓存和消息代理。

var redis = require('redis');
var client = redis.createClient(); //creates a new client

默认情况下,redis.createClient() 将分别使用 127.0.0.1 和 6379 作为主机名和端口。

Article : Using Redis with Node.js

您将能够从任何进程/机器毫无问题地设置/获取数组

(与分叉一个孩子并使用节点默认 ipc 来做同样的事情相比,这可能是矫枉过正)

child_process.fork

如果 Node.js 进程是使用 IPC 通道生成的(请参阅 Child ProcessCluster 文档),则会发出 'message' 事件 每当父进程使用 childprocess.send() 发送消息时 被子进程接收。

所以你可以有一个main.js 和 fork code1.js &amp; code2.js 作为孩子。

【讨论】:

    猜你喜欢
    • 2018-09-06
    • 2019-04-12
    • 2013-03-31
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多