MST

星途 面试题库

面试题:Node.js Net模块TCP服务器的连接管理

使用Node.js的Net模块创建一个TCP服务器,当有多个客户端连接时,服务器需要能够记录每个客户端的连接时间,并在客户端断开连接时,向其他所有在线客户端广播该客户端的断开信息,包括其连接时长。请描述实现思路并给出关键代码片段。
26.0万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 引入模块:引入Node.js的net模块用于创建TCP服务器。
  2. 创建服务器:使用net.createServer()方法创建TCP服务器实例。
  3. 记录连接时间:在connection事件中,记录每个客户端的连接时间。
  4. 处理断开连接:在end事件中,计算连接时长,并向其他在线客户端广播断开信息。
  5. 维护在线客户端:使用一个数组或对象来维护当前在线的客户端。

关键代码片段

const net = require('net');

// 存储在线客户端及其连接时间
const clients = [];

const server = net.createServer((socket) => {
  // 记录连接时间
  const connectTime = new Date();
  clients.push({ socket, connectTime });

  socket.on('end', () => {
    // 找到断开连接的客户端
    const disconnectedClient = clients.find((client) => client.socket === socket);
    if (disconnectedClient) {
      const index = clients.indexOf(disconnectedClient);
      clients.splice(index, 1);

      // 计算连接时长
      const duration = new Date() - disconnectedClient.connectTime;

      // 广播断开信息
      clients.forEach((client) => {
        client.socket.write(`Client disconnected. Connection duration: ${duration}ms\n`);
      });
    }
  });
});

const port = 3000;
server.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});