Node.js 的模块提供了基于 TCP 或 IPC 的网络通信能力,用于创建服务器和客户端。以下是模块的核心 API 详解,包含类、方法、事件及示例。
1. 模块引入
- const net = require('net');
复制代码 2. 核心类与方法
2.1 net.Server 类
用于创建 TCP 或 IPC 服务器。
方法- server.listen(port[, host][, backlog][, callback])
复制代码 监听指定端口和主机。
- : 端口号(若为 IPC 服务器则忽略)。
- : 主机地址(默认)。
- : 最大等待连接队列长度(默认由系统决定)。
- : 监听成功后的回调(等效于监听事件)。
- const server = net.createServer();
- server.listen(3000, '127.0.0.1', () => {
- console.log('Server listening on port 3000');
- });
复制代码- server.listen(path[, callback])
复制代码 监听 IPC 路径(仅 Unix 系统支持)。
停止服务器接受新连接,关闭现有连接后触发回调。返回服务器绑定的地址信息(- { port, address, family }
复制代码 ),未监听时返回。
事件当有新客户端连接时触发,回调参数为对象。- server.on('connection', (socket) => {
- console.log('New client connected');
- });
复制代码 服务器开始监听时触发。服务器关闭后触发。发生错误时触发(如端口被占用)。
2.2 net.Socket 类
表示 TCP 或 IPC 的客户端或服务器端连接。
方法- socket.connect(port[, host][, connectListener])
复制代码 连接到指定端口和主机。
- : 目标端口。
- : 目标主机(默认)。
- : 连接成功后的回调(等效于监听事件)。
- const client = new net.Socket();
- client.connect(3000, '127.0.0.1', () => {
- console.log('Connected to server');
- });
复制代码- socket.write(data[, encoding][, callback])
复制代码 发送数据到另一端。
- : 要发送的数据(或)。
- : 字符串编码(默认)。
- : 数据写入完成后的回调。
- socket.end([data][, encoding])
复制代码 半关闭连接(发送 FIN 包),可选发送最后一段数据。强制销毁连接,触发事件。/暂停/恢复接收数据(控制事件触发)。- socket.setTimeout(timeout[, callback])
复制代码 设置连接超时时间(毫秒),超时后触发回调并自动销毁连接。- socket.setTimeout(3000, () => {
- console.log('Socket timed out');
- socket.destroy();
- });
复制代码- socket.setNoDelay([noDelay])
复制代码 禁用 Nagle 算法(),降低延迟,适用于高频小数据包场景。
属性
- /: 本地地址和端口。
- /: 远程地址和端口。
- /: 读取/写入的字节数。
事件接收到数据时触发,回调参数为或。- socket.on('data', (data) => {
- console.log('Received:', data.toString());
- });
复制代码 连接成功建立时触发。另一端发送 FIN 包(结束连接)时触发。连接完全关闭后触发。连接超时时触发(需配合使用)。发生错误时触发(如连接被重置)。
2.3 工具函数
- net.createServer([options][, connectionListener])
复制代码 快速创建服务器,等同于+。- const server = net.createServer((socket) => {
- socket.write('Welcome to the server!');
- });
复制代码- net.connect(port[, host][, connectListener])
复制代码 创建客户端并连接到服务器,返回对象。- const client = net.connect(3000, 'localhost', () => {
- client.write('Hello from client!');
- });
复制代码 判断输入是否为 IP 地址,返回(IPv4)、(IPv6)或(无效)。- net.isIP('192.168.1.1'); // 4
- net.isIP('::1'); // 6
- net.isIP('hello'); // 0
复制代码 /判断输入是否为 IPv4 或 IPv6 地址,返回布尔值。
3. 完整示例 TCP 服务器
- const net = require('net');
- const server = net.createServer((socket) => {
- console.log('Client connected');
- socket.on('data', (data) => {
- console.log('Received:', data.toString());
- socket.write('Echo: ' + data);
- });
- socket.on('end', () => {
- console.log('Client disconnected');
- });
- });
- server.listen(3000, '127.0.0.1', () => {
- console.log('Server listening on port 3000');
- });
复制代码 TCP 客户端- const net = require('net');
- const client = net.connect(3000, '127.0.0.1', () => {
- client.write('Hello Server!');
- });
- client.on('data', (data) => {
- console.log('Server response:', data.toString());
- client.end();
- });
- client.on('end', () => {
- console.log('Disconnected from server');
- });
复制代码 4. 关键注意事项
- 错误处理:始终监听事件,避免进程崩溃。
- 数据流控制:使用和管理大数据流。
- 连接超时:通过防止僵死连接。
- IPC 路径:Unix 系统下 IPC 需确保路径可写,Windows 不支持。
通过掌握这些 API,可以构建高效的 TCP 服务器和客户端,适用于实时通信、微服务等场景。
到此这篇关于Node.js net模块详解的文章就介绍到这了,更多相关Node.js net模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://www.jb51.net/javascript/339608z2o.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|