Node.js net模块详解(含类、方法、事件)

 更新时间:2025年04月15日 09:21:51   作者:Sean2077  
Node.js 的 net 模块提供了基于 TCP 或 IPC 的网络通信能力,用于创建服务器和客户端,本文给大家介绍Node.js net模块详解包含类、方法、事件及示例,感兴趣的朋友一起看看吧

Node.js 的 net 模块提供了基于 TCP 或 IPC 的网络通信能力,用于创建服务器和客户端。以下是 net 模块的核心 API 详解,包含类、方法、事件及示例。

1. 模块引入

const net = require('net');

2. 核心类与方法

2.1 net.Server 类

用于创建 TCP 或 IPC 服务器。

方法

server.listen(port[, host][, backlog][, callback])
监听指定端口和主机。

  • port: 端口号(若为 IPC 服务器则忽略)。
  • host: 主机地址(默认 'localhost')。
  • backlog: 最大等待连接队列长度(默认由系统决定)。
  • callback: 监听成功后的回调(等效于监听 'listening' 事件)。
const server = net.createServer();
server.listen(3000, '127.0.0.1', () => {
  console.log('Server listening on port 3000');
});

server.listen(path[, callback])
监听 IPC 路径(仅 Unix 系统支持)。

  • path: IPC 文件路径(如 '/tmp/echo.sock')。

server.close([callback])
停止服务器接受新连接,关闭现有连接后触发回调。

server.address()
返回服务器绑定的地址信息({ port, address, family }),未监听时返回 null

事件

'connection'
当有新客户端连接时触发,回调参数为 socket 对象。

server.on('connection', (socket) => {
  console.log('New client connected');
});

'listening'
服务器开始监听时触发。

'close'
服务器关闭后触发。

'error'
发生错误时触发(如端口被占用)。

2.2 net.Socket 类

表示 TCP 或 IPC 的客户端或服务器端连接。

方法

socket.connect(port[, host][, connectListener])
连接到指定端口和主机。

  • port: 目标端口。
  • host: 目标主机(默认 'localhost')。
  • connectListener: 连接成功后的回调(等效于监听 'connect' 事件)。
const client = new net.Socket();
client.connect(3000, '127.0.0.1', () => {
  console.log('Connected to server');
});

socket.write(data[, encoding][, callback])
发送数据到另一端。

  • data: 要发送的数据(BufferString)。
  • encoding: 字符串编码(默认 'utf8')。
  • callback: 数据写入完成后的回调。

socket.end([data][, encoding])
半关闭连接(发送 FIN 包),可选发送最后一段数据。

socket.destroy()
强制销毁连接,触发 'close' 事件。

socket.pause() / socket.resume()
暂停/恢复接收数据(控制 'data' 事件触发)。

socket.setTimeout(timeout[, callback])
设置连接超时时间(毫秒),超时后触发回调并自动销毁连接。

socket.setTimeout(3000, () => {
  console.log('Socket timed out');
  socket.destroy();
});

socket.setNoDelay([noDelay])
禁用 Nagle 算法(noDelay=true),降低延迟,适用于高频小数据包场景。

属性

  • socket.localAddress / socket.localPort: 本地地址和端口。
  • socket.remoteAddress / socket.remotePort: 远程地址和端口。
  • socket.bytesRead / socket.bytesWritten: 读取/写入的字节数。

事件

'data'
接收到数据时触发,回调参数为 BufferString

socket.on('data', (data) => {
  console.log('Received:', data.toString());
});

'connect'
连接成功建立时触发。

'end'
另一端发送 FIN 包(结束连接)时触发。

'close'
连接完全关闭后触发。

'timeout'
连接超时时触发(需配合 setTimeout 使用)。

'error'
发生错误时触发(如连接被重置)。

2.3 工具函数

net.createServer([options][, connectionListener])
快速创建服务器,等同于 new net.Server() + server.on('connection')

const server = net.createServer((socket) => {
  socket.write('Welcome to the server!');
});

net.connect(port[, host][, connectListener])
创建客户端并连接到服务器,返回 net.Socket 对象。

const client = net.connect(3000, 'localhost', () => {
  client.write('Hello from client!');
});

net.isIP(input)
判断输入是否为 IP 地址,返回 4(IPv4)、6(IPv6)或 0(无效)。

net.isIP('192.168.1.1'); // 4
net.isIP('::1');         // 6
net.isIP('hello');       // 0

net.isIPv4(input) / net.isIPv6(input)
判断输入是否为 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. 关键注意事项

  • 错误处理:始终监听 'error' 事件,避免进程崩溃。
  • 数据流控制:使用 pause()resume() 管理大数据流。
  • 连接超时:通过 setTimeout 防止僵死连接。
  • IPC 路径:Unix 系统下 IPC 需确保路径可写,Windows 不支持。

通过掌握这些 API,可以构建高效的 TCP 服务器和客户端,适用于实时通信、微服务等场景。

到此这篇关于Node.js net模块详解的文章就介绍到这了,更多相关Node.js net模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nodejs实现定时爬虫的完整实例

    Nodejs实现定时爬虫的完整实例

    这篇文章主要给大家介绍了关于Nodejs实现定时爬虫的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 浅析Node.js实现HTTP文件下载

    浅析Node.js实现HTTP文件下载

    本文介绍如何用Node.js来实现HTTP文件下载,文章以实例演示所以很详细,有需要的小伙伴们可以参考学习。
    2016-08-08
  • vscode无法运行npm命令的问题解决(cmd可行)

    vscode无法运行npm命令的问题解决(cmd可行)

    本文主要介绍了vscode无法运行npm命令的问题解决(cmd可行),VSCode无法调用npm可能是因为环境路径配置错误,下面就来具体介绍一下原因及解决方法,感兴趣的可以了解一下
    2024-04-04
  • nodejs中实现路由功能

    nodejs中实现路由功能

    这篇文章主要介绍了nodejs中实现路由功能,顾名思义,路由指的就是我们要针对不同的URL有不同的处理方式,本文将教你在node.js中实现路由功能,需要的朋友可以参考下
    2014-12-12
  • 一文详解NPM如何换源

    一文详解NPM如何换源

    在每一次的实际开发过程中我们都会下载相关的依赖包,最官方的是 npm,但是该服务器对于国内开发者来说,下载起来是比较慢的,所以我们需要换源,下面这篇文章主要给大家介绍了关于NPM如何换源的相关资料,需要的朋友可以参考下
    2023-02-02
  • NodeJs爬虫框架Spider基础使用教程

    NodeJs爬虫框架Spider基础使用教程

    这篇文章主要为大家介绍了NodeJs爬虫框架Spider基础使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 浅谈Node.js 沙箱环境

    浅谈Node.js 沙箱环境

    本篇文章主要介绍了Node.js 沙箱环境 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Nginx 配置多站点vhost 的方法

    Nginx 配置多站点vhost 的方法

    这篇文章主要介绍了Nginx 配置多站点vhost 的方法,需要的朋友可以参考下
    2018-01-01
  • node.js对应npm安装和使用方法教程

    node.js对应npm安装和使用方法教程

    这篇文章主要给大家介绍了关于node.js对应npm安装和使用方法的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用node.js具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • nodejs 实现模拟form表单上传文件

    nodejs 实现模拟form表单上传文件

    使用nodejs来模拟form表单进行文件上传,可以同时上传多个文件。
    2014-07-07

最新评论