我需要在不同的节点进程或集群之间共享一些对象或完整的模块,我搜索了许多博客而没有得到满意的答案。
如果那不可能,那么任何想法如何开销呢?
答案 0 :(得分:3)
根据配置,我可以想到三种方式。
redis:使用像redis这样的快速本地数据库在同一台机器上的进程之间共享对象涉及使用简单的put(key,data)和get(key),但是你必须序列化和反序列化,可能使用JSON。没有正式的并发控制,因此您必须注意所有客户端都可以使用任何对象更改。一种方法是使用内置于pub / sub中的redis来进行更改时触发。另一种方法是使用乐观锁定。
unix套接字对于需要使用不同技术共享对象的项目,例如c ++应用程序和节点之间,unix套接字提供了一种非常快速的解决方案。您仍然需要序列化/反序列化并控制并发性,但它比数据库解决方案更快,并且可以跨不同的技术工作。有一个node project可以帮助解决一些细节问题。
scuttlebutt 可能是在不同计算机上的进程之间共享数据的最佳方式。来自scuttlebutt site:
Scuttlebutt旨在被子类化为各种数据模型。 提供了两个实现作为示例scuttlebutt/model和scuttlebutt/events ...
还有一个很好的white paper解决了使用复制来共享对象数据的科学原理。
我希望这会给你一些可行的选择。
答案 1 :(得分:0)
大约 4 或 5 天前我看到了您的回答,并决定为此做点什么
https://npmjs.com/package/webject
这个包可以在网络上共享对象
对象可以通过serve
托管或通过connect
获得两个函数,如
let {serve,connect}=require('webject')
服务的人可以像
let myWebject=serve(myObj) //object myObj gets shared, myObj could even be cyclic
let clientToken=myWebject.addToken(1) //level 1 is view only(edits won't edit your server side object)
连接的人可以像
let myClientObj=await connect('wss://example.com:8009',clientToken) //assuming you shared a client token with someone to connect
//this is an asynchronous promise that if you have a valid location and token, you would connect to an object hosted(by that location)