net.Server类


此类用于创建 TCP 或本地服务器。

net.Server 是一个带有以下事件的 EventEmitter

'connection' 事件

  • {net.Socket} 连接对象

当一个新的连接建立时发出。socket 是一个 net.Socket 实例。

'listening' 事件

当服务器调用 server.listen 后被绑定时发出。

'close' 事件

当服务器关闭时发出。请注意,如果存在连接,不会发出此事件,直到所有的连接都结束了才发出。

'error' 事件

  • {Error}

当发生错误时发出。'close' 事件将这个事件后直接调用,详见在 server.listen 讨论中的例子。

server.maxConnections

当服务器的连接数变高时,设置此属性可以拒绝更多的连接。

一旦一个 socket 通过 child_process.fork() 被发送到子进程时,不推荐使用此选项。

server.connections

稳定度:0 - 已废弃:使用 server.getConnections() 替代。

服务器上的并行连接数。

当通过 child_process.fork() 发送一个 socket 到子进程时,它会变成 null。要轮询派生进程并获得当前活动的连接号,请使用异步的 server.getConnections 代替。

server.listen(port[, hostname][, backlog][, callback])

在指定的 porthostname 上,开始接受连接。如果省略 hostname,当 IPv6 可用时,该服务器将接收任何 IPv6 地址(::)的连接,否则,接收任何 IPv4 地址(0.0.0.0)的连接。当端口值为零时,将分配一个随机端口。

backlog 正在连接队列的最大长度。实际长度会根据你的操作系统通过 sysctl 设置来定,例如在 linux 上的 tcp_max_syn_backlogsomaxconn。该参数的默认值是 511(不是 512)。

该函数是异步的。当服务器已经绑定,将发出 'listening' 事件。最后的参数 callback 将会作为 'listening' 事件的一个监听器。

有一个问题,一些用户在运行后得到了 EADDRINUSE 错误。这意味着,另一个服务器已经运行在了请求的端口上。处理的方法之一是等待一秒钟,然后重试。这可以这么做:

server.on('error', (e) => {
    if (e.code == 'EADDRINUSE') {
        console.log('Address in use, retrying...');
        setTimeout(() => {
            server.close();
            server.listen(PORT, HOST);
        }, 1000);
    }
});

(注意:Node.js 的所有 socket 都已经设置了 SO_REUSEADDR。)

server.listen(path[, backlog][, callback])

  • path {String}

  • backlog {Number}

  • callback {Function}

启动本地 socket 服务器监听指定 path 上的连接。

该函数是异步的。当服务器已经绑定,将发出 'listening' 事件。最后的参数 callback 将会作为 'listening' 事件的一个监听器。

在 UNIX 中,本地域通常称之为 UNIX 域。路径是一个文件系统路径名。它受到相同的命名约定和在文件创建时完成的权限检查,将在文件系统中可见,并将持续到解除链接

在 Windows 中,本地域使用命名 pipe 来实现。该路径必须参考 \\?\pipe\\\.\pipe\ 条目。允许任何字符,但后者可能会做 pipe 名称的一些处理,如解析 .. 序列。尽管出现,该 pipe 命名空间是平的。Pipe 不会持续下去,当它们的最后参考被关闭时,它们将被移除。不要忘记 JavaScript 字符串转义 requirejs 路径用双反斜线来指定。例如:

net.createServer().listen(path.join('\\\\?\\pipe', process.cwd(), 'myctl'))

backlog 参数的行为类似于 server.listen(port[, hostname][, backlog][, callback])

server.listen(handle[, backlog][, callback])

  • handle {Object}

  • backlog {Number}

  • callback {Function}

handle 对象既可以被设置为一个服务器,也可以被设置为一个 socket(任何具有的基础 _handle 任何成员)或一个 {fd: <n>} 对象。

这会使得服务器接受指定的句柄连接,并假设它是一个文件描述符或已经绑定到端口的句柄或域 socket。

在 Windows 上不支持监听文件描述符。

该函数是异步的。当服务器已经绑定,将发出 'listening' 事件。最后的参数 callback 将会作为 'listening' 事件的一个监听器。

backlog 参数的行为类似于 server.listen(port[, hostname][, backlog][, callback])

server.listen({
    host: 'localhost',
    port: 80,
    exclusive: true
});

server.listen(options[, callback])

  • options {Object} - 需要。支持以下属性:

    • port {Number} - 可选。

    • host {String} - 可选。

    • backlog {Number} - 可选。

    • path {String} - 可选。

    • exclusive {Boolean} - 可选。

  • callback - 可选。

optionsporthostbacklog 属性以及可选的回调函数,它们的行为和在 server.listen(port[, hostname][, backlog][, callback]) 中的调用相同。另外,path 选项可用于指定 UNIX socket。

如果 exclusivefalse(默认),那么集群的工作进程将使用相同的基础句柄,允许连接共享处理业务。当 exclusivetrue 时,不共享句柄,并试图端口共享结果会导致错误。监听专用端口上的例子如下所示。

server.address()

返回绑定的地址,该地址名称族和服务器的端口由操作系统报告。当得到一个系统分配的地址时,用于查找哪个端口已经被分配。返回具有三个属性的对象,如 { port: 12346, family: 'IPv4', address: '127.0.0.1' }

示例:

var server = net.createServer((socket) => {
    socket.end('goodbye\n');
}).on('error', (err) => {
    // handle errors here
    throw err;
});

// grab a random port.
server.listen(() => {
    address = server.address();
    console.log('opened server on %j', address);
});

直到发生 'listening' 事件前,不要调用 server.address()

server.close([callback])

停止服务器接受新的连接,并保持现有的连接。该函数是异步的,当所有的连接都结束并且服务器发生 'close' 事件时,服务器最终关闭。可选的 callback'close' 事件发生时调用一次。不同于事件,当它被关闭时,如果服务器未打开,它将用 Error 作为其唯一的参数调用。

server.unref()

如果这是在事件系统中唯一的活动服务器,在服务器上调用 unref 将允许程序退出。如果服务器已经 unrefd,再次调用 unref 将没有效果。

返回 server

server.ref()

unref 相反,在一个之前 unrefd 的服务器上调用 ref不会让程序退出,如果它是唯一剩下的服务器(默认行为)。如果服务器已经 refd,再次调用 ref 将没有效果。

返回 server

results matching ""

    No results matching ""