MST

星途 面试题库

面试题:Node.js 中 TCP 服务器创建流程及简单优化

请详细描述在 Node.js 中创建 TCP 服务器的完整流程。假设你创建的 TCP 服务器接收大量并发连接,你会从哪些方面对其进行简单优化以提高性能?
36.2万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

创建 TCP 服务器的完整流程

  1. 引入 net 模块:在 Node.js 中,通过 net 模块来创建 TCP 服务器。使用 const net = require('net'); 引入该模块。
  2. 创建服务器实例:调用 net.createServer([options][, connectionListener]) 方法来创建服务器实例。其中 options 是可选参数,connectionListener 是当有新连接时的回调函数。例如:
const server = net.createServer((socket) => {
    // 处理新连接的逻辑,socket 是与客户端通信的套接字对象
    socket.write('Welcome!\n');
    socket.on('data', (data) => {
        socket.write('You sent: ' + data.toString());
    });
    socket.on('end', () => {
        console.log('Connection ended');
    });
});
  1. 监听端口:使用服务器实例的 listen 方法,指定要监听的端口号和可选的主机地址。例如:
server.listen(8080, '127.0.0.1', () => {
    console.log('Server listening on port 8080');
});

性能优化方面

  1. 连接池:如果有大量并发连接,可以使用连接池来管理连接。减少创建和销毁连接的开销,提高连接的复用率。
  2. 负载均衡:通过负载均衡器将请求均匀分配到多个服务器实例上,避免单个服务器负载过高。可以使用软件负载均衡器如 Nginx,或者云服务提供商提供的负载均衡服务。
  3. 优化代码逻辑:减少不必要的计算和 I/O 操作。例如,避免在处理连接的回调函数中进行复杂的同步计算,可以将这些计算放在异步任务中处理。
  4. 内存管理:注意处理大流量数据时的内存使用,及时释放不再使用的内存。例如,正确处理缓冲区数据,避免内存泄漏。
  5. 使用集群(Cluster)模块: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 {
    http.createServer((req, res) => {
        res.writeHead(200);
        res.end('Hello World\n');
    }).listen(8000, () => {
        console.log(`Worker ${process.pid} started`);
    });
}
  1. 优化网络配置:调整系统的网络参数,如 tcp_max_tw_bucketstcp_tw_reuse 等,优化 TCP 连接的处理。但这需要对系统网络有深入了解,且可能因操作系统不同而有所差异。