Node中的net模块

1、net模块介绍

Node.js中的net模块提供了一组用于创建TCP(传输控制协议)或IPC(进程间通信)服务器和客户端的API。net模块以异步的方式工作,这意味着不需要使用线程即可并发地处理多个连接请求。

net模块一般用于创建基于流的TCP或IPC服务器,它可以在服务器端向客户端发送和接收数据,同时也可以在客户端与服务器进行通信。

2、net模块的API

2.1、net.createServer([options][,connectionListener])

该方法用于创建TCP或IPC服务器。传入connectionListener回调函数,该函数在每个客户端连接时被调用。可以使用该函数实例化socket对象,例如在客户端与服务器之间进行通信时使用。

const net = require('net');

const server = net.createServer((socket) => {

// connection callback

socket.end('hello client');

});

server.listen(8080, () => {

console.log('server is listening');

});

上述示例中,我们使用createServer()方法创建一个TCP服务器,该服务器在8080端口上监听连接请求。每次客户端连接到服务器时,服务器会向客户端发送消息并关闭连接。

2.2、net.connect(options[,connectListener])

该方法用于创建TCP或IPC客户端。传入connectListener回调函数,该函数在连接建立时被调用。可以通过socket对象与服务器进行通信。

const net = require('net');

const client = net.connect({ port: 8080 }, () => {

// connection callback

console.log('client is connected');

client.write('hello server');

});

上述示例中,我们使用connect()方法连接到TCP服务器,该服务器在8080端口上监听连接请求。连接被成功建立后,客户端向服务器发送一条消息。

2.3、socket.write(data[,encoding][,callback])

该方法用于向已连接的socket对象发送数据。

const net = require('net');

const server = net.createServer((socket) => {

// connection callback

socket.on('data', (data) => {

console.log(data.toString()); // hello server

socket.write('hi client');

});

});

server.listen(8080, () => {

console.log('server is listening');

});

const client = net.connect({ port: 8080 }, () => {

// connection callback

console.log('client is connected');

client.write('hello server');

});

client.on('data', (data) => {

console.log(data.toString()); // hi client

client.end();

});

上述示例中,客户端向服务器发送消息后,服务器会向客户端回复一条消息,然后关闭连接。客户端在收到服务器的回复后也会关闭连接。

2.4、socket.pipe(destination[,options])

该方法用于将socket对象中的数据流传输到另一个可写流对象destination中。

const net = require('net');

const fs = require('fs');

const server = net.createServer((socket) => {

// connection callback

const stream = fs.createReadStream('file.txt');

stream.pipe(socket);

stream.on('end', () => {

socket.end();

});

});

server.listen(8080, () => {

console.log('server is listening');

});

const client = net.connect({ port: 8080 }, () => {

// connection callback

console.log('client is connected');

client.pipe(process.stdout);

});

上述示例中,服务器将文件中的内容通过socket传输给客户端,客户端将收到的数据流打印到控制台上。

2.5、事件

net模块中常用的事件包括connection、data、end、error和close事件。这些事件可以用于监听不同的操作,并在事件触发时执行回调函数。

const net = require('net');

const server = net.createServer((socket) => {

// connection callback

socket.on('data', (data) => {

console.log(data.toString()); // hello server

socket.write('hi client');

});

socket.on('end', () => {

console.log('socket ended');

});

socket.on('error', (err) => {

console.log(err);

});

socket.on('close', () => {

console.log('socket closed');

});

});

server.listen(8080, () => {

console.log('server is listening');

});

const client = net.connect({ port: 8080 }, () => {

// connection callback

console.log('client is connected');

client.write('hello server');

});

client.on('data', (data) => {

console.log(data.toString()); // hi client

client.end();

});

client.on('end', () => {

console.log('client ended');

});

client.on('error', (err) => {

console.log(err);

});

client.on('close', () => {

console.log('client closed');

});

上述示例中,我们监听了服务器和客户端的connection、data、end、error和close事件,并在事件触发时分别输出对应的消息。当客户端向服务器发送消息后,服务器会向客户端回复一条消息,并在收到客户端的close事件后关闭连接。

3、总结

Node.js中的net模块提供了一组用于创建TCP或IPC服务器和客户端的API。我们可以使用这些API创建基于流的TCP或IPC服务器,并在服务器和客户端之间进行通信。同时,我们也可以使用事件来监听不同的操作,并在事件触发时执行相应的回调函数。