session、socket持久化在代码层次究竟是什么操作

在代码角度来讲,无论是session,还是socket,在nodejs中,均表示为一个对象,所以我一直想的是,把session、socket对象序列化存储在redis或其它数据库中,用到对象时,再将数据反序列化成对象(实际就是这些对象持久化后,就不在内存里保存这些信息,就能减少内存开销),是的,你们没看错,我真的是这样想的。

所以在写代码时,就会出现问题。比如:用socket.io的时候,尝试用querystring.stringify(socket)去进行序列化,得到的结果是:

nsp=&server=&adapter=&id=dDLa5kYZNUqIVCSmAAAr&client=&conn=&rooms=&acks=&connected=true&disconnected=false&handshake=&flags=&

很显然,这个是可以存储到redis中的,但是从redis里取出数据通过querystring.parse()反序列,但是显然不能当作socket用(我没测试)。所以到这里,我觉得持久化不是指这样的操作。

那么持久化应该是什么?

session好说,nodejs,用的koa-session2库,session对对象就是存储的一些用户信息的object,所以直接序列化放redis,用的时候就反序列化好了。

socket我认为序列化的应该是socket id这类的信息(还有一些用户),如果需要实现点对点聊天,就不用在内存里额外保存socket id,通过redis进行查询获取。不然反序列化整个对象,进行信息发送时,从那个地方获取tcp连接通道传送信息呢?

你可能感兴趣的:(session、socket持久化在代码层次究竟是什么操作)