悠悠楠杉
Node.js net模块详解(含类、方法、事件)
1. 核心类:net.Server
和 net.Socket
net.Server
:代表一个网络服务器,用于监听来自客户端的连接请求。它继承自EventEmitter
,提供了如listen
(监听端口)、close
(关闭服务器)等方法和如connection
(当有新的连接时触发)等事件。net.Socket
:代表一个网络套接字,是双向通信的流。每个从客户端来的连接都会创建一个新的net.Socket
实例。它同样继承自EventEmitter
,支持读写操作、事件监听等。
2. 方法
构造函数:可以通过
require('net').createServer([options][, connectionListener])
来创建一个新的服务器实例,通过require('net').createConnection(options[, connectListener])
来创建一个新的客户端或IPC连接。监听端口:使用
server.listen(port[, hostname][, backlog][, callback])
来监听指定的端口和(可选的)主机名。回调函数在监听完成时被调用。关闭服务器:通过调用
server.close([callback])
来关闭服务器,结束监听并关闭所有的连接。可选的回调函数在服务器关闭后被调用。
3. 事件
connection:当有新的连接时触发,参数为新的
net.Socket
实例。例如:server.on('connection', (socket) => { ... })
。listening:当服务器开始监听时触发,参数为错误对象或null(如果没有错误)。例如:
server.on('listening', () => { ... })
。error:当服务器或连接发生错误时触发,参数为错误对象。例如:
server.on('error', (err) => { ... })
。close:当服务器关闭时触发,可选地接受一个回调函数作为参数。例如:
server.on('close', () => { ... })
。
4. 应用示例
创建TCP服务器:
javascript
const net = require('net');
const server = net.createServer(socket => {
console.log('client connected');
socket.write('hello world\n');
socket.setEncoding('utf8'); // 设置编码格式为utf8
socket.on('data', (data) => { // 接收数据事件
console.log(data); // 打印接收到的数据
});
socket.on('end', () => { // 连接结束事件
console.log('client disconnected'); // 打印客户端断开连接的信息
});
});
server.listen(1234, '127.0.0.1', () => { // 监听在1234端口上,监听成功后打印信息
console.log('server bound to 1234'); // 打印信息显示服务器已绑定到1234端口上。
});
创建IPC客户端:
```javascript
const net = require('net');
const client = net.createConnection({ path: '//path/to/socket/file' }, () => { // 通过文件路径创建IPC连接。 这里的路径为Unix域套接字文件路径,Windows不适用。
console.log('connected to the server'); // 连接成功打印信息。在Unix系统中,路径是IPC通信的关键。
});
client.on('data', (data) => { // 数据接收事件处理函数。这里接收来自服务器的数据。
console.log(data); // 打印接收到的数据。
}); // 注意,IPC通常用于同一台机器上的进程间通信,所以不需要考虑端口号问题。 它是通过文件系统来实现的。 client.write('Hello, server!'); // 向服务器发送数据 client.end(); // 断开连接(可选) }); }); }); // 注意: 在Windows上创建IPC客户端时, 请使用流 (如fs的createReadStream/createWriteStream) 或其他机制, 因为Node.js的net模块在Windows上不支持通过文件路径创建IPC连接。)