【问题标题】:Forwarding socket.io/engine.io connection to another server将 socket.io/engine.io 连接转发到另一台服务器
【发布时间】:2017-09-05 04:00:51
【问题描述】:

我们正在尝试找到解决 websocket 负载平衡问题的最佳方法。

Websocket 最初可以连接到任何服务器,该服务器将运行一些逻辑,然后如果需要它会将客户端“重定向”到适当的服务器。

socket.io/engine.io 中有没有办法重定向/转发连接?

类似:

io.use(function(socket){
    // ... logic
    if(logic === true){
        socket.redirect("172.10.10.2:3000");
    }
});

我知道socket.redirect 不是有效的函数,但有类似的吗?

【问题讨论】:

  • 您可以将 socket.io 消息发送回客户端并告诉它要连接的 IP/端口,并让客户端侦听该消息,当它收到它时,断开当前连接并重新连接到新服务器,如:socket.emit('redirect', '172.10.10.2:3000')
  • @jfriend00 是的!这是关于我们走了多远,不幸的是,虽然它发生得太晚了。我找不到有关 socket.io 的某种中间件的信息,它会拦截连接流?如果我使用 io.use() 它仅适用于根命名空间

标签: node.js sockets networking socket.io engine.io


【解决方案1】:

socket.io 不支持socket.redirect 之类的东西

但是你可以使用 Nginx 做负载均衡的代理,使用socket.io-redis 做socket.io 的适配器并在多个节点处理if(logic === true){}

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2012-06-07
    相关资源
    最近更新 更多