javascript - 在不同实例之间共享nodejs中的对象

标签 javascript node.js

我需要在不同的 Node 进程或集群之间共享一些对象或完整的模块,我搜索了很多博客都没有得到满意的答案。

如果那是不可能的,那么有什么想法可以解决这个问题吗?

最佳答案

根据配置,我可以想到三种方式。

  1. 如果服务是 Node 集群,则使用像 leveldb 或 redis 这样的快速数据库。
  2. 如果服务在同一台机器上但作为单独的进程运行,则 Redis 或 unix 套接字可以很好地工作。
  3. 如果服务分布在多台机器上,则 scuttlebutt提供了一个很好的解决方案。

redis:使用像 redis 这样的快速本地数据库在同一台机器上的进程之间共享对象涉及使用简单的 put(key, data) 和 get(key),但您必须序列化和反序列化,可能使用 JSON。没有正式的并发控制,因此您必须注意所有客户端都可以使用任何对象更改。一种方法是使用 pub/sub 中内置的 redis 在进行更改时触发。另一种方法是使用乐观锁定。

unix sockets 对于需要共享来自不同技术的对象的项目,比如在 c++ 应用程序和 Node 之间,unix sockets 提供了一个非常快速的解决方案。您仍然需要序列化/反序列化和控制并发性,但它比数据库解决方案更快,并且可以跨不同的技术工作。有一个 node project这有助于了解一些细节。

scuttlebutt 可能是在不同机器上的进程之间共享数据的最佳方式。来自scuttlebutt site :

Scuttlebutt is intended to be subclassed into a variety of data-models. Two implementations are provided as examples scuttlebutt/model and scuttlebutt/events...

还有一个不错的white paper解决了使用复制共享对象数据背后的科学问题。

我希望这能为您提供一些可行的替代方案。

关于javascript - 在不同实例之间共享nodejs中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519325/

相关文章:

javascript - 可以禁用 fineuploader 但仍然呈现屏幕元素吗?

node.js - 在nodejs中使用salesforce oauth时无法获取/回调

node.js - Node Sass 找不到当前环境的绑定(bind) : Linux 64-bit with Node. js 7.x

javascript - rethink/couch db 手动触发并执行脚本

javascript:创建一个对象,该对象继承自多个构造函数的原型(prototype)

javascript - amCharts 光标缩放在 OpenLayers map 叠加层中不起作用

javascript - JQueryUI sortable 只能工作一次

ruby-on-rails - Rails for NodeJS 中是否有与 PaperTrail gem 等效的东西?

javascript - 用于实时多人游戏的 Node.js UDP

javascript - 如何判断 html 元素是否已完全加载?