MST
星途 面试题库

面试题:Node.js 基于TCP的聊天室应用中如何处理并发连接

在Node.js实现基于TCP的聊天室应用场景下,当多个用户同时尝试连接时,怎样有效地处理这些并发连接,以确保每个用户都能正常通信,且系统性能不受太大影响?请描述实现思路和关键代码片段。
43.9万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用net模块:Node.js的net模块提供了创建TCP服务器和客户端的能力。
  2. 事件监听:通过监听服务器的connection事件来处理新的连接。每个连接都作为一个独立的Socket对象,通过监听Socketdata事件来接收客户端发送的数据,监听end事件来处理连接关闭。
  3. 连接管理:使用一个数据结构(如数组)来存储所有连接的Socket对象,以便广播消息给所有在线用户。
  4. 消息广播:当收到某个客户端的消息时,遍历存储Socket对象的数组,将消息发送给除发送者外的其他所有客户端。

关键代码片段

const net = require('net');

// 创建TCP服务器
const server = net.createServer((socket) => {
  // 新连接处理
  console.log('新用户连接');
  // 存储所有连接的数组
  global.sockets = global.sockets || [];
  global.sockets.push(socket);

  // 接收客户端数据
  socket.on('data', (data) => {
    // 广播消息给其他所有客户端
    global.sockets.forEach((s) => {
      if (s!== socket) {
        s.write(data);
      }
    });
  });

  // 处理连接关闭
  socket.on('end', () => {
    console.log('用户断开连接');
    global.sockets = global.sockets.filter((s) => s!== socket);
  });
});

// 监听端口
server.listen(8080, () => {
  console.log('服务器已启动,监听8080端口');
});