首先,我们需要了解什么是Node.js的API。API全称是Application Programming Interface,它是软件系统不同组件之间的交互接口。Node.js提供了一个强大的API库,包括了许多内置的模块,来支持应用程序的开发与部署。其中net是Node.js提供的一个核心模块,它提供了一个异步的网络接口,用于创建TCP和UNIX客户端/服务器。
接下来,我们就要开始讲解“Node.js API详解之 net模块实例分析”的完整攻略了。
一、net模块的介绍
Node.js的net模块提供了一个异步的网络接口,用于创建TCP和UNIX客户端/服务器。该模块可以通过require('net')引入。在使用该模块时,可以通过创建一个net.Socket对象,来完成TCP或UNIX网络连接,从而实现网络通信。
下面是使用net模块创建一个简单的服务端的示例代码:
const net = require('net');
const server = net.createServer((socket) => {
socket.write('Hello World!\r\n');
socket.end();
});
server.listen(8080, () => {
console.log('server is listening on port 8080');
});
上述代码创建了一个TCP服务器,监听8080端口。当有客户端连接到该服务端时,会发送Hello World!消息给客户端,并且断开连接。
服务器启动后,可以使用telnet命令来连接该服务端:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello World!
Connection closed by foreign host.
二、net模块API的详细介绍
1. net.createServer([options][, connectionListener])
- options: 对象类型,可选参数,用于指定服务器的参数,包括以下属性:
- allowHalfOpen: 布尔型,表示是否允许半开式连接,默认为false。
- pauseOnConnect: 布尔型,表示是否在接受客户端连接后暂停套接字,默认为false。
- connectionListener: 函数类型,回调函数,用于处理连接事件。
createServer函数用于创建一个TCP或UNIX服务器,返回一个net.Server对象。可以通过传入可选参数来指定服务器的参数。当有新的连接请求到来时,会触发connectionListener回调函数,该函数会接收到一个net.Socket对象,用于和客户端进行通信。
2. server.listen(port[, host][, backlog][, callback])
- port: 数字型或字符串型,必选参数,表示需要监听的端口号。
- host: 字符串型,可选参数,表示需要监听的主机地址,默认为0.0.0.0。
- backlog: 数字型,可选参数,表示在拒绝连接前,操作系统可以挂起的最大连接数量,默认为511。
- callback: 函数类型,可选参数,回调函数。
listen函数用于启动一个TCP或UNIX服务器,开始监听客户端连接。当有新的连接请求到来时,会触发connectionListener回调函数,该函数会接收到一个net.Socket对象,用于和客户端进行通信。可以通过传入可选参数来指定服务器的监听地址与最大连接数。
3. server.address()
该函数用于获取一个包含服务器地址信息的对象,该对象包含以下属性:
- address: 字符串型,表示监听的地址。
- family: 字符串型,表示监听的协议类型,可以是IPv4或IPv6。
- port: 数字型,表示监听的端口号。
- size: 数字型,表示该对象占用的字节数。
4. server.close([callback])
该函数用于关闭服务器。当所有客户端连接断开后,服务器会自动关闭。可以通过回调函数来获取服务器关闭后的状态信息。
5. net.Socket类
Socket类表示一个TCP或UNIX连接。可以通过net.Socket类的实例对象来进行数据的读写和连接的管理。
1. new net.Socket([options])
- options: 对象类型,可选参数,用于指定Socket的参数,包括以下属性:
- fd: 数字型,表示一个已经存在的文件描述符(Windows不支持该参数)。
- allowHalfOpen: 布尔型,表示是否允许半开式连接,默认为false。
2. socket.connect(options[, connectListener])
- options: 对象类型,必选参数,用于指定连接的参数,包括以下属性:
- port: 数字型,表示需要连接的服务器端口号。
- host: 字符串型,表示需要连接的服务器地址。
- connectListener: 函数类型,可选参数,回调函数,用于处理连接成功事件。
connect函数用于连接到一个TCP或UNIX服务器,并触发connectListener回调函数来处理连接成功事件。
3. socket.write(data[, encoding][, callback])
- data: 字符串型或Buffer型,必选参数,需要发送的数据。
- encoding: 字符串型,可选参数,表示要对数据进行编码的编码类型,默认为utf8。
- callback: 函数类型,可选参数,回调函数,用于处理数据发送完成后触发的事件。
write函数用于向连接的对端发送数据。可以通过传入可选参数来指定数据的编码类型和数据发送完成后的回调函数。
4. socket.pipe(destination[, options])
- destination: 可读流类型,必选参数,表示要将数据发送到的另一个可读流。可以是一个net.Socket对象,也可以是一个Node.js中任何支持可读流接口的对象。
- options: 对象类型,可选参数,用于指定管道操作的参数,包括以下属性:
- end: 布尔型,表示在源可写端关闭时,是否自动关闭目标可读端,默认为true。
pipe函数用于将数据从源流导入到目标流中。在该函数内部可以自动监听源流的data和end事件,并将事件内部的数据写入到目标流中。
5. socket.end([data][, encoding])
- data: 字符串型或Buffer型,可选参数,表示需要发送的数据。
- encoding: 字符串型,可选参数,表示要对数据进行编码的编码类型,默认为utf8。
end函数用于关闭连接。当所有的数据被写入后,会发送一个FIN包来表示数据发送完毕,关闭连接。可以通过传入可选参数来指定需要发送的关闭数据。
三、net模块实例分析
下面是使用net模块创建Echo服务器的示例代码。Echo服务器是一个简单的TCP服务器,它会将接收到的所有数据发送回客户端。
const net = require('net');
const server = net.createServer((socket) => {
console.log(`client ${socket.remoteAddress}:${socket.remotePort} connected`);
socket.on('data', (data) => {
console.log(`data received from ${socket.remoteAddress}:${socket.remotePort}: ${data.toString()}`);
socket.write(data.toString());
});
socket.on('end', () => {
console.log(`client ${socket.remoteAddress}:${socket.remotePort} disconnected`);
});
socket.on('error', (err) => {
console.log(`client ${socket.remoteAddress}:${socket.remotePort} error: ${err.message}`);
});
});
server.listen(8080, () => {
console.log('server is listening on port 8080');
});
上述代码创建了一个TCP服务器,监听8080端口。当有客户端连接到该服务端时,会发送客户端连接信息到控制台,并监听data、end和error事件。当有数据传输时,会将数据发送回客户端。当客户端关闭连接或发生错误时,会向控制台输出相应的信息。
可以使用telnet命令来测试该Echo服务器的功能:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello World!
Hello World!
上述代码将发送Hello World!消息给Echo服务端,并会立即接收到服务器返回的Hello World!消息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js API详解之 net模块实例分析 - Python技术站