net.Server类
- 'connection' 事件
- 'listening' 事件
- 'close' 事件
- 'error' 事件
- server.maxConnections
- server.connections
- server.listening
- server.getConnections(callback)
- server.listen(port[, hostname][, backlog][, callback])
- server.listen(path[, backlog][, callback])
- server.listen(handle[, backlog][, callback])
- server.listen(options[, callback])
- server.address()
- server.close([callback])
- server.unref()
- server.ref()
此类用于创建 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])
在指定的 port 和 hostname 上,开始接受连接。如果省略 hostname,当 IPv6 可用时,该服务器将接收任何 IPv6 地址(::)的连接,否则,接收任何 IPv4 地址(0.0.0.0)的连接。当端口值为零时,将分配一个随机端口。
backlog 正在连接队列的最大长度。实际长度会根据你的操作系统通过 sysctl 设置来定,例如在 linux 上的 tcp_max_syn_backlog 和 somaxconn。该参数的默认值是 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- 可选。
options 的 port、host 和 backlog 属性以及可选的回调函数,它们的行为和在 server.listen(port[, hostname][, backlog][, callback]) 中的调用相同。另外,path 选项可用于指定 UNIX socket。
如果 exclusive 是 false(默认),那么集群的工作进程将使用相同的基础句柄,允许连接共享处理业务。当 exclusive 是 true 时,不共享句柄,并试图端口共享结果会导致错误。监听专用端口上的例子如下所示。
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。