0

我目前正在通过在 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 。有人可以告诉我是否可以进行细微调整以使其正确,还是应该重新考虑此解决方案?

4

2 回答 2

2

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

于 2012-05-12T05:00:38.560 回答
1

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

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

如何使用 Node.js 唯一标识套接字

于 2012-05-12T09:39:02.627 回答