在nodejs / redis中保存tcp会话?

时间:2012-05-11 21:26:16

标签: session node.js tcp redis

我目前正在通过TCP(经典案例)开发一个小型聊天应用程序来学习node.js。

我现在要做的是将此应用程序扩展为使用静态用户:

  • 围绕消息传递的所有逻辑都应该基于用户而不是 会话。
  • 因此,每个会话都需要与a一起保存 引用用户(以便应用程序可以发送消息) 基于用户名的正确会话)。
  • 我已经研究过Redis存储这些数据但到目前为止还没有成功。

            tcpServer.on 'connection', (tcpSocket) -> tcpSocket.write "Welcome"
            redis.hmset("sessions", userid, tcpSocket)
            tcpSocket.on "data", (data) ->
                redis.hvals "sessions", (err, repl) ->
                    repl.forEach (reply, y) ->
                        reply.Write("Data is written to clients!")
        tcpServer.listen 7000
    

当前错误消息:TypeError:Object [object Object]没有方法'write'

这表明我无法存储tcpSocket,正如我现在正在尝试做的那样。有人可以告诉我,我是否可以进行微调以使其正确或者我应该重新考虑这个解决方案吗?

2 个答案:

答案 0 :(得分:2)

Redis支持的数据类型非常少:字符串,列表,集合,排序列表和哈希表。而已。其他一些类型,如Date,可以很容易地转换为/从字符串,因此它也可以使用。但是socket是一个复杂的内部对象,所以你很可能无法将其转换为字符串,因此无法存储在Redis中。

答案 1 :(得分:1)

由于套接字对象要复杂存储在Redis中,似乎要走的路是根据下面的链接向对象添加标识符。

然后,该标识符当然可以保存在数据库中,以在不同对象之间创建实现等。

How to uniquely identify a socket with Node.js