Node.js net模块用于创建服务器和客户端。
此模块提供异步网络包装器,可以使用以下语法导入它。var net = require("net")
。
25.1. 方法
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套接字连接。 connectListener参数将添加为“connect”事件的侦听器。 它是一个返回新的’net.Socket’的工厂方法。net.createConnection(path[, connectListener])
:创建到路径的Unix套接字连接。 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。
25.2. 类 – net.Server
此类用于创建TCP或本地服务器。
25.2.1. 方法
server.listen(port[, host][, backlog][, callback])
:开始接受指定端口和主机上的连接。 如果省略主机,则服务器将接受指向任何IPv4地址(INADDR_ANY)的连接。 端口值为零将分配随机端口。server.listen(path[, callback])
:启动本地套接字服务器,侦听给定路径上的连接。server.listen(handle[, callback])
:handle对象可以设置为服务器或套接字(具有底层_handle成员的任何东西)或{fd:}对象。 它将使服务器接受指定句柄上的连接,但假定文件描述符或句柄已绑定到端口或域套接字。 Windows不支持侦听文件描述符。server.listen(options[, callback])
:选项的端口,主机和积压属性以及可选的回调函数的行为与调用server.listen(port,[host],[backlog],[callback])时的行为相同。 或者,path选项可用于指定UNIX套接字。server.close([callback])
:最后在所有连接结束并且服务器发出“关闭”事件时关闭。server.address()
:返回操作系统报告的绑定地址,服务器的地址系列名称和端口。server.unref()
:如果这是事件系统中唯一的活动服务器,则在服务器上调用unref将允许程序退出。 如果服务器已经unfd,那么再次调用unref将无效。server.ref()
:与unref相反,在以前未刷新的服务器上调用ref将不会让程序退出,如果它是唯一的服务器(默认行为)。 如果服务器已重新启动,则再次调用ref将不起作用。server.getConnections(callback)
:异步获取服务器上的并发连接数。 套接字被发送到分叉时工作。 回调应该有两个参数错误和计数。
25.2.2. 事件
listening
:在调用server.listen后绑定服务器时发出。connection
:在建立新连接时发出。 Socket对象,连接对象可用于事件处理程序。 Socket是net.Socket的一个实例。close
:服务器关闭时发出。 请注意,如果存在连接,则在所有连接结束之前不会发出此事件。error
:发生错误时发出。 此事件后将直接调用close
事件。
25.3. 类 – net.Socket
此对象是TCP或本地套接字的抽象。 net.Socket实例实现双工Stream接口。 它们可以由用户创建并用作客户端(使用 connect()
),也可以由Node创建,并通过服务器的“连接”事件传递给用户。
25.3.1. 事件
net.Socket是一个eventEmitter,它会发出以下事件。
lookup
:解析主机名后但在连接之前发出。 不适用于UNIX套接字。connect
:成功建立套接字连接时发出。data
:收到数据时发出。 参数数据将是Buffer或String。 数据编码由socket.setEncoding()
设置。end
:当套接字的另一端发送FIN数据包时发出。timeout
:如果套接字因不活动而超时,则发出。 这只是为了通知套接字已空闲。 用户必须手动关闭连接。drain
:写缓冲区变空时发出。 可用于限制上传。error
:发生错误时发出。 此事件后将直接调用close
事件。close
:插座完全关闭后发出。 参数had_error
是一个布尔值,表示套接字是否由于传输错误而关闭。
25.3.2. 属性
net.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
:发送的字节数。
25.3.3. 方法
new net.Socket([options])
:构造一个新的套接字对象。socket.connect(port[, host][, connectListener])
:打开给定套接字的连接。 如果给出了端口和主机,则套接字将作为TCP套接字打开,如果省略host,则假定为localhost。 如果给出了路径,则套接字将作为Unix套接字打开到该路径。socket.connect(path[, connectListener])
:打开给定套接字的连接。 如果给出了端口和主机,则套接字将作为TCP套接字打开,如果省略host,则假定为localhost。 如果给出了路径,则套接字将作为Unix套接字打开到该路径。socket.setEncoding([encoding])
:将套接字的编码设置为可读流。socket.write(data[, encoding][, callback])
:在套接字上发送数据。 第二个参数指定字符串的编码 – 默认为UTF8编码。socket.end([data][, encoding])
:半关闭套接字,即它发送FIN数据包。 服务器可能仍会发送一些数据。socket.destroy()
:确保此套接字上不再发生I/O活动。 仅在出现错误(解析错误等)时才需要。socket.pause()
:暂停读取数据。 也就是说,不会发出’数据’事件。 用于限制上传。socket.resume()
:在暂停()调用后恢复阅读。socket.setTimeout(timeout[, callback])
:在套接字上的超时毫秒不活动后,将套接字设置为超时。 默认情况下,net.Socket没有超时。socket.setNoDelay([noDelay])
:禁用Nagle算法。 默认情况下,TCP连接使用Nagle算法,它们在发送数据之前缓冲数据。 对noDelay设置为true将在每次调用socket.write()
时立即触发数据。 noDelay默认为true。socket.setKeepAlive([enable][, initialDelay])
:启用/禁用保持活动功能,并可选择在空闲套接字上发送第一个keepalive探针之前设置初始延迟。 启用默认值为false。socket.address()
:返回操作系统报告的绑定地址,地址系列名称和套接字端口。 返回具有三个属性的对象,例如{port:12346,family:’IPv4’,address:’127.0.0.1′}
。socket.unref()
:如果这是事件系统中唯一的活动套接字,则在套接字上调用unref将允许程序退出。 如果套接字已经unfd,则再次调用unref将不起作用。socket.ref()
:与unref相反,在先前未刷新的套接字上调用ref将不会让程序退出,如果它是唯一的套接字(默认行为)。 如果套接字是refd,那么再次调用ref将不起作用。
25.4. 示例
使用以下代码创建名为server.js的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文件:
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
下一节:Node.js dns模块用于执行实际的DNS查找以及使用基础操作系统名称解析功能。