【问题标题】:Save tcp sessions in nodejs / redis?在 nodejs / redis 中保存 tcp 会话?
【发布时间】:2012-05-20 11:49:49
【问题描述】:

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

我现在想做的是扩展这个应用程序以使用静态用户:

  • 围绕消息传递的所有逻辑都应基于用户而不是 会议。
  • 因此,每个会话都需要与一个 对用户的引用(以便应用程序可以在 基于用户名的正确会话)。
  • 我已经研究过 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] has no method 'write'

这表明我现在无法存储 tcpSocket。有人可以告诉我是否可以进行细微调整以使其正确,或者我应该重新考虑此解决方案吗?

【问题讨论】:

    标签: session node.js tcp redis


    【解决方案1】:

    由于套接字对象在 Redis 中存储起来很复杂,看来要走的路是根据下面的链接为对象添加标识符。

    这个标识符当然可以保存在数据库中,以创建不同对象之间的关系等。

    How to uniquely identify a socket with Node.js

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-26
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        相关资源
        最近更新 更多