Javascript 序列化、存储和反序列化WS对象

Javascript 序列化、存储和反序列化WS对象,javascript,node.js,websocket,Javascript,Node.js,Websocket,我正在使用NodeJS ws库构建一个应用程序。目前,我正在使用一个对象来存储用户的websocket连接实例,并使用唯一的用户ID作为密钥。 伪代码: 让userWebSockets={ “此处的用户guid”:WSConnection }; 这很好,当我需要将消息发送回特定用户时,我可以从userWebSockets对象中获取他们的连接,从而let ws=userWebSockets['user-guid-here'] 问题是,如果我对正在运行的框上的节点进程进行集群,用集群模块为主进程

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


让userWebSockets={
“此处的用户guid”:WSConnection
};

这很好,当我需要将消息发送回特定用户时,我可以从
userWebSockets
对象中获取他们的连接,从而
let ws=userWebSockets['user-guid-here']

问题是,如果我对正在运行的框上的节点进程进行集群,用集群模块为主进程分叉,或者对框进行集群,那么无法保证相同的
userWebSockets
对象将在内存中,并且当我尝试根据用户的唯一标识符查找用户连接时,我有可能从查找中得到
未定义的
作为返回值

我的第一个倾向是使用像Redis这样的远程k=>v存储来维护字典,然而,在我的实现尝试中,我意识到Redis显然不会存储Javascript对象,使用这种技术,我能做的最好的事情就是以一种稍后可以对对象进行重构/反序列化的方式对其进行序列化。我尝试从以下存储库中使用Crockford的cycle.js:这没有成功,因为我发现我试图恢复生命的对象的原型方法没有被保留(例如,在本例中,
ws.send()

我目前的解决方法是使用nginx平衡到上游实例池,并使用ip_hash指令使用户ip=>instance保持粘性,但是我对这个解决方案不满意


有人对我在这里所做的事有任何运气吗?如果有更好或更惯用的方法来处理用户=>ws连接关联,我也愿意重新设计应用程序。

Hi,我也面临类似的问题。你找到解决方案了吗?我恐怕没有@AbdulBasit-我坚持让用户ip=>实例对该项目具有粘性的解决方案。让我知道如果你发现一些更优雅的,我会很高兴听到!