启动一个服务器来监听连接。 net.Server 可以是 TCP 或 [IPC] 服务器,具体取决于它监听的内容。

    可能的参数:

    • [server.listen(handle[, backlog][, callback])][server.listen(handle)]
    • [server.listen(options[, callback])][server.listen(options)]
    • [server.listen(path[, backlog][, callback])][server.listen(path)] 用于 [IPC] 服务器。
    • [server.listen([port[, host[, backlog]]][, callback])][server_listen_port] 用于 TCP 服务器。

    这个函数是异步的。当服务器开始监听时,会触发 ['listening'] 事件。 最后一个参数 callback 将被添加为 ['listening'] 事件的监听器。

    所有的 listen() 方法都可以使用一个 backlog 参数来指定待连接队列的最大长度。 实际的长度将由操作系统的 sysctl 设置决定,例如 Linux 上的 tcp_max_syn_backlogsomaxconn。 此参数的默认值是 511 (不是512)。

    所有的 [net.Socket] 都被设置为 SO_REUSEADDR (详见 [socket(7)])。

    当且仅当上次调用 server.listen() 发生错误或已经调用 server.close() 时,才能再次调用 server.listen() 方法。否则将抛出 ERR_SERVER_ALREADY_LISTEN 错误。

    监听时最常见的错误之一是 EADDRINUSE。 这是因为另一个服务器已正在监听请求的 port/path/handle。 处理此问题的一种方法是在一段时间后重试:

    1. server.on('error', (e) => {
    2. if (e.code === 'EADDRINUSE') {
    3. console.log('地址正被使用,重试中...');
    4. setTimeout(() => {
    5. server.close();
    6. server.listen(PORT, HOST);
    7. }, 1000);
    8. }
    9. });