Node.js - net 模块



Node.js net 模块用于创建服务器和客户端。此模块提供了一个异步网络包装器,可以使用以下语法进行导入。

var net = require("net")

方法

方法 描述
net.createServer([options][, connectionListener]) 创建新的 TCP 服务器。connectionListener 参数会自动设置为“connection”事件的侦听器。
net.connect(options[, connectionListener]) 一个工厂方法,返回一个新的 net.Socket 并连接到提供的地址和端口。
net.createConnection(options[, connectionListener]) 一个工厂方法,返回一个新的 net.Socket 并连接到提供的地址和端口。
net.connect(port[, host][, connectListener]) 创建到主机上端口的 TCP 连接。如果省略 host,则将假定为“localhost”。connectListener 参数将被添加为“connect”事件的侦听器。它是一种工厂方法,它返回一个新的 net.Socket
net.createConnection(port[, host][, connectListener]) 创建到主机上端口的 TCP 连接。如果省略 host,则将假定为“localhost”。connectListener 参数将被添加为“connect”事件的侦听器。它是一种工厂方法,它返回一个新的 net.Socket
net.connect(path[, connectListener]) 创建到路径的 Unix Socket 连接。connectListener 参数将被添加为“connect”事件的侦听器。它是一种工厂方法,它返回一个新的 net.Socket
net.createConnection(path[, connectListener]) 创建到路径的 Unix Socket 连接。connectListener 参数将被添加为“connect”事件的侦听器。它是一种工厂方法,它返回一个新的 net.Socket
net.isIP(input) 测试输入是否为 IP 地址。对于无效字符串,返回 0,对于 IP 版本 4 地址,返回 4,对于 IP 版本 6 地址,返回 6。
net.isIPv4(input) 如果输入是版本 4 IP 地址,则返回 true,否则返回 false。
net.isIPv6(input) 如果输入是版本 6 的 IP 地址,则返回 true,否则返回 false。

类 - net.Server

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

方法

方法 描述
server.listen(port[, host][, backlog][, callback]) 开始接受指定端口和主机上的连接。如果省略主机,服务器将接受定向到任何 IPv4 地址 (INADDR_ANY) 的连接。端口值为零将分配一个随机端口。
server.listen(path[, callback]) 启动本地 Socket 服务器,侦听给定路径上的连接。
server.listen(handle[, callback]) handle 对象可以设置为服务器或 Socket (具有底层 _handle 成员的任何内容),也可以设置为 {fd: <n>} 对象。这将导致服务器接受指定句柄上的连接,但假定文件描述符或句柄已绑定到端口或域 Socket 。Windows 不支持侦听文件描述符。
server.listen(options[, callback]) 选项的 port、host 和 backlog 属性以及可选的回调函数的行为与它们在调用 server.listen(port, [host], [backlog], [callback]) 时的行为相同。或者,可以使用 path 选项来指定 UNIX Socket 。
server.close([callback]) 最后,当所有连接都结束时,服务器发出“关闭”事件。
server.address() 返回操作系统报告的服务器的绑定地址、地址、系列名称和端口。
server.unref() 如果服务器是事件系统中唯一活动的服务器,则在服务器上调用 unref 将允许程序退出。如果服务器已经是 unrefd,那么再次调用 unref 将不起作用。
server.ref() 与 unref 相反,如果唯一剩下的服务器,在以前未引用的服务器上调用 ref 将不会让程序退出(默认行为)。如果服务器是 refd,则再次调用 ref 将不起作用。
server.getConnections(callback) 异步获取服务器上的并发连接数。当 Socket 被发送到叉子时工作。回调应该接受两个参数:err 和 count。

事件

事件 描述
listening 在调用 server.listen 后绑定服务器时发出。
connection 在建立新连接时发出。Socket 对象,该连接对象可供事件处理程序使用。Socket 是 net 的一个 net.Socket。
close 在服务器关闭时发出。请注意,如果存在连接,则在所有连接结束之前不会发出此事件。
error 发生错误时发出。“close”事件将在此事件之后直接调用。

类 - net.Socket

此对象是 TCP 或本地 Socket 的抽象。net.Socket 实例实现双工 Stream 接口。它们可以由用户创建并用作客户端(使用 connect()),也可以由 Node 创建并通过服务器的“连接”事件传递给用户。

事件

net.Socket 是一个 eventEmitter,它发出以下事件。

事件 描述
lookup 在解析主机名之后但在连接之前发出。不适用于 UNIX socket。
connect 在成功建立 socket 连接时发出。
data 在接收到数据时发出。参数 data 将是 Buffer 或 String。数据的编码由 socket.setEncoding() 设置。
end 当 Socket 的另一端发送 FIN 数据包时发出。
timeout 如果 Socket 因不活动而超时,则发出。这只是为了通知 Socket 已空闲。用户必须手动关闭连接。
drain 当写入缓冲区变为空时发出。可用于限制上传。
error 发生错误时发出。“close”事件将在此事件之后直接调用。
close 一旦插座完全关闭,就会发出。参数 had_error 是一个布尔值,它指示 Socket 是否由于传输错误而关闭。

属性

net.Socket 提供了许多有用的属性,以便更好地控制 Socket 交互。

属性 描述
socket.bufferSize 此属性显示当前缓冲要写入的字符数。
socket.remoteAddress 远程 IP 地址的字符串表示形式。例如,“74.125.127.100”或“2001:4860:a005::68”。
socket.remoteFamily 远程 IP 系列的字符串表示形式。“IPv4”或“IPv6”。
socket.remotePort 远程端口的数字表示形式。例如,80 或 21。
socket.localAddress 远程客户端正在连接的本地 IP 地址的字符串表示形式。例如,如果您正在侦听“0.0.0.0”,而客户端在“192.168.1.1”上连接,则值将为“192.168.1.1”。
socket.localPort 本地端口的数字表示形式。例如,80 或 21。
socket.bytesRead 接收的字节数。
socket.bytesWritten 发送的字节数。

方法

方法 描述
new net.Socket([options]) 构造一个新的 Socket 对象。
socket.connect(port[, host][, connectListener]) 打开给定 Socket 的连接。如果给出了 port 和 host,则 Socket 将作为 TCP Socket 打开,如果省略 host,则将假定为 localhost。如果给定了路径,则 Socket 将作为指向该路径的 Unix Socket 打开。
socket.connect(path[, connectListener]) 打开给定 Socket 的连接。如果给出了 port 和 host,则 Socket 将作为 TCP Socket 打开,如果省略 host,则将假定为 localhost。如果给定了路径,则 Socket 将作为指向该路径的 Unix Socket 打开。
socket.setEncoding([encoding]) 将 Socket 的编码设置为可读流。
socket.write(data[, encoding][, callback]) 在 Socket 上发送数据。第二个参数指定字符串情况下的编码 - 它默认为 UTF8 编码。
socket.end([data][, encoding]) 半闭合 Socket ,即发送 FIN 数据包。服务器可能仍会发送一些数据。
socket.destroy() 确保此 Socket 上不再发生 I/O 活动。仅在出现错误(解析错误左右)时才需要。
socket.pause() 暂停读取数据。也就是说,不会发出“数据”事件。用于限制上传。
socket.resume() 在调用 pause() 后恢复阅读。
socket.setTimeout(timeout[, callback]) 将 Socket 设置为在 Socket 上超时毫秒后超时。默认情况下,net.Socket 没有超时。
socket.setNoDelay([noDelay]) 禁用 Nagle 算法。默认情况下,TCP 连接使用 Nagle 算法,它们在发送数据之前缓冲数据。为 noDelay 设置 true 将在每次调用 socket.write() 时立即触发数据。noDelay 默认为 true。
socket.setKeepAlive([enable][, initialDelay]) 启用/禁用保持连接功能,并可选择设置在空闲 Socket 上发送第一个保持连接探测之前的初始延迟。enable 默认值为 false。
socket.address() 返回操作系统报告的绑定地址、地址系列名称和 Socket 端口。返回一个具有三个属性的对象,例如 { port: 12346, family: 'IPv4', address: '127.0.0.1' }。
socket.unref() 如果这是事件系统中唯一活动的 Socket ,则在 Socket 上调用 unref 将允许程序退出。如果 Socket 已经是 unrefd,那么再次调用 unref 将不起作用。
socket.ref() 与 unref 相反,如果程序是唯一剩下的 Socket ,则在以前未引用的 Socket 上调用 ref 将不会让程序退出(默认行为)。如果 Socket 是 refd,那么再次调用 ref 将不起作用。

例子

使用以下代码创建名为 server.js 的 js 文件 -

文件:server.js


var net = require('net');
var server = net.createServer(function(connection) {	
	 	console.log('client connected');
	 	
	 	connection.on('end', function() {
	 	 	 console.log('client disconnected');
	 	});
	 	
	 	connection.write('Hello World!\r\n');
	 	connection.pipe(connection);
});

server.listen(8080, function() {	
	 	console.log('server is listening');
});

现在运行server.js以查看结果 -

$ node server.js

验证输出。

server is listening

使用以下代码创建名为 client.js 的 js 文件 -

文件:client.js


var net = require('net');
var client = net.connect({port: 8080}, function() {
	 	console.log('connected to server!'); 	
});

client.on('data', function(data) {
	 	console.log(data.toString());
	 	client.end();
});

client.on('end', function() {	
	 	console.log('disconnected from server');
});

现在从另一个终端运行client.js以查看结果 -

$ node client.js

验证输出。

connected to server!
Hello World!

disconnected from server

验证运行 server.js 的终端上的输出。

server is listening
client connected
client disconnected