【问题标题】:NodeJS: Redirect Client to Another Worker/InstanceNodeJS:将客户端重定向到另一个工作人员/实例
【发布时间】:2014-07-03 00:10:48
【问题描述】:

我在一个网站上运行了同一个 Nodejs 应用程序的多个实例。我使用 websocket。

假设客户端连接到实例#1。我想将他转移到实例 #2。

我正在做的是实例 #1 将数据发送到 Redis DB,然后实例 #2 获取它。但是如何将客户端重定向到另一个实例?

【问题讨论】:

    标签: javascript node.js redirect websocket instance


    【解决方案1】:

    你可以试试socket.io,它可以解决你的问题

    使用npm install socket.io安装这个包,去http://socket.io/学习文档

    【讨论】:

    • 我已经在使用socket.io。这如何帮助我重定向 websocket?
    • socket.io中有前端和服务端,
    【解决方案2】:

    我很确定您不能将打开的套接字从一个节点进程传递到另一个。

    如果您有办法从外部访问特定实例(使用不同的端口、ip 或 dns),您可以在握手时路由套接字连接(使用 http 重定向)或在连接建立后使用客户端的特殊事件将用于断开连接并重新连接到另一个实例。

    【讨论】:

      【解决方案3】:

      您需要断开与#1 实例的连接并与#2 实例连接。尽管您可以通过在客户端编写一个包装器来以某种方式模拟它,但您无法进行软切换,该包装器将从#1断开并重新连接到#2。 如果您使用负载均衡器,只需断开与客户端或服务器端的连接(假设您将 #1 实例退出轮换)并让客户端重新连接。

      【讨论】:

        【解决方案4】:

        socket.io 中有前端和服务器端, 在两端之间,你应该注册事件,在服务器端,你应该注册客户端事件:发出在客户端注册的服务器事件,并使用broadcast.emit向其他实例发送消息, 同样在客户端,你应该注册服务器事件:发出具有回调函数的客户端事件

        【讨论】:

        • 我猜我们讨论的不是同一类型的实例。 Broadcast.emit 将消息发送给其他客户端,而不是其他实例。 Nodejs 实例是同时运行的网站的 2 个副本,物理上是分开的。
        猜你喜欢
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 1970-01-01
        • 2021-02-16
        相关资源
        最近更新 更多