多个socket.io进程共享同一个端口?

Posted

技术标签:

【中文标题】多个socket.io进程共享同一个端口?【英文标题】:Multiple socket.io processes share the same port? 【发布时间】:2012-07-21 03:36:59 【问题描述】:

我尝试扩展我的 socket.io 应用程序并尝试在我的服务器上运行多个进程。

我使用 redis 存储而不是内存存储,如下所述:https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

我的服务器监听 8090 端口: var io = require('/usr/local/lib/node_modules/socket.io').listen(8090);

当我启动第二个进程时,我收到地址正在使用错误: 警告 - 引发错误:错误:监听 EADDRINUSE

处理此问题的最佳方法是什么? 每个进程一个端口和一个负载均衡器来区分它们?

或者有更好的解决方案吗?

【问题讨论】:

【参考方案1】:

为此,我使用node-http-proxy,并根据请求的 URL 将流量路由到内部端口。下面是我用来路由请求的一个非常精简的示例。

var httpProxy = require('http-proxy');

var httpOptions = 
    router: 
        'domain1.com/foo': 'localhost:3001',
        'domain1.com/bar': 'localhost:3002',
        'domain2.com/baz': 'localhost:3003',
     
;

var httpServer = httpProxy.createServer(httpOptions);
httpServer.listen(80);

关于我的特定设置的更多细节可以在这个问题上找到:How to use vhosts alongside node-http-proxy?

【讨论】:

以上是关于多个socket.io进程共享同一个端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用集群处理 Socket.IO 房间?

没有http服务器的Socket.IO?

socket.io 客户端可以连接到两个不同的服务器/端口吗?

带有 nginx 负载平衡器问题的 Socket.IO 集群

使用集群将 Socket.IO 扩展到多个 Node.js 进程时的一些问题

如何通过 socks5 代理使用 JavaScript socket.io-client 库?