序列化,存储和反序列化WS对象

我正在使用NodeJS的ws库来构build一个应用程序。 目前,我正在使用一个对象来存储用户的websocket连接的实例,并以唯一的用户ID作为密钥。 伪代码:

let userWebSockets = { 'user-guid-here': WSConnection
};

这工作正常,当我需要针对特定​​的用户发送消息回我可以从userWebSockets对象抓住他们的连接,因此, let ws = userWebSockets['user-guid-here']

问题是,如果我正在运行的框上集群节点进程,请使用集群模块分叉主进程,或将这些框集群化,那么不能保证相同的userWebSockets对象将在内存中,并且当我尝试根据他们的唯一标识符查找用户的连接,我冒险得到undefined作为查找的返回值。

我的第一个倾向是使用像Redis一样的远程k => v存储来处理维护字典,但是我意识到在我的实现尝试中,Redis显然不会存储Javascript对象,并且我可以用这样的技术被序列化的对象的方式,它可以稍后重组/反序列化。 我尝试从以下仓库使用Crockford的cycle.js: https : //github.com/douglascrockford/JSON-js/blob/master/cycle.js这是不成功的,因为我发现我试图带来的对象的原型方法(例如,在这种情况下, ws.send()不会被保留下来。

我目前的解决方法是使用nginx来平衡上游实例池,并使用ip_hash指令使用户ip =>实例粘滞,但我不满意这个解决scheme。

有没有人有我想在这里做什么运气? 我也打开重新devise的应用程序,如果有更好或更习惯的方式来处理用户=> WS连接关联。