Nodejs中单一node里的socket.io稳定连接15k个client,连接数还有多大提升空间?

发布于 1周前 作者 phonegap100 来自 nodejs/Nestjs

Nodejs中单一node里的socket.io稳定连接15k个client,连接数还有多大提升空间?
内存、网络、 CPU 等都没到顶,连接数就死活上不去了,搞不懂为什么。

6 回复

那个进程的 limits 里大部分值是 unlimited ,最小的数字是打开的文件描述符数, 65535 ,所以,恐怕瓶颈不在这里。

看来上班时还得试试扩大 limits ;
不过 socket.io 不仅仅是 websocket ,有一些封装和 trade off ,项目代码也有一些业务逻辑,实际跑起来不一定能达到理论上的极限。

好奇的是有人在生产环境中用 autobahn 的吗

我一直在用。

在Node.js中使用Socket.IO来稳定连接15,000个客户端已经是一个相当可观的成就,但要进一步提升连接数,需要考虑多个方面,包括硬件资源、网络架构、以及代码优化。

硬件资源

  1. CPU和内存:增加更多的CPU核心和内存可以显著提升Node.js处理并发连接的能力。
  2. 网络带宽:确保服务器有足够的网络带宽来处理大量的并发连接和数据传输。

代码优化

  1. 事件循环优化:避免阻塞事件循环的操作,如同步I/O、密集计算等。
  2. 使用集群:Node.js的cluster模块可以充分利用多核CPU,通过创建多个工作进程来分担负载。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
} else {
  // Worker can share any TCP connection
  // In this case it is an HTTP server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}

网络架构

  1. 负载均衡:使用负载均衡器(如Nginx、HAProxy)来分发请求到多个Node.js实例。
  2. 水平扩展:增加更多的Node.js服务器实例来分担负载。

综上所述,通过合理的硬件升级、代码优化和网络架构设计,Node.js中的Socket.IO连接数可以进一步提升。

回到顶部