MST

星途 面试题库

面试题:Node.js TCP Socket错误恢复机制的实现

假设在一个基于Node.js的TCP Socket服务器中,当发生连接超时错误后,需要实现自动重连机制。请描述实现这个自动重连机制的思路,并给出关键代码示例。
28.4万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 捕获连接超时错误:在Node.js的TCP Socket连接过程中,监听connect事件判断连接是否成功建立,监听timeout事件捕获连接超时错误。
  2. 设置重连逻辑:当捕获到连接超时错误后,启动一个定时器,在一定时间间隔后尝试重新连接。
  3. 控制重连次数和间隔:可以设置最大重连次数,防止无限重连。同时,每次重连的间隔可以逐渐增加,例如采用指数退避策略,避免短时间内频繁连接对服务器造成过大压力。

关键代码示例

const net = require('net');

// 配置服务器地址和端口
const serverAddress = '127.0.0.1';
const serverPort = 8080;

// 最大重连次数
const maxReconnectAttempts = 5;
// 初始重连间隔时间(毫秒)
let reconnectInterval = 1000;

function connectToServer(reconnectAttempt = 0) {
    const socket = new net.Socket();

    socket.connect(serverPort, serverAddress, () => {
        console.log('成功连接到服务器');
        // 连接成功后重置重连间隔
        reconnectInterval = 1000;
    });

    socket.on('timeout', () => {
        socket.end();
        console.log('连接超时,尝试重连...');

        if (reconnectAttempt < maxReconnectAttempts) {
            setTimeout(() => {
                connectToServer(reconnectAttempt + 1);
                // 指数退避策略增加重连间隔
                reconnectInterval = reconnectInterval * 2;
            }, reconnectInterval);
        } else {
            console.log('达到最大重连次数,停止重连');
        }
    });

    socket.on('error', (err) => {
        console.error('连接错误:', err.message);
        socket.end();
    });
}

connectToServer();