当前位置: 首页 > news >正文

net 是原始TCP,http是基于TCP的HTTP协议封装 - jerry

在 Node.js 里,nethttp 都是网络通信相关的核心模块,但抽象层级和使用场景完全不同。可以理解为:
👉 net 是“原始 TCP”,http 是“基于 TCP 的 HTTP 协议封装”


一句话对比

模块层级面向谁适合做什么
net 低层(TCP) 协议/网络开发者 自定义协议、长连接、即时通信
http 高层(HTTP) 业务开发者 Web 接口、前后端通信、REST API

一、net 模块(TCP 原生通信)

本质

  • 直接操作 TCP Socket

  • 没有协议语义

  • 数据就是:Buffer / string

👉 你要 自己定义通信协议

特点

  • 面向 字节流

  • 没有请求 / 响应概念

  • 没有 Header / Body

  • 没有状态管理

  • 性能高、控制力强


示例:TCP 服务端

const net = require('net');const server = net.createServer((socket) => {socket.on('data', (data) => {console.log('收到数据:', data.toString());socket.write('pong');});
});server.listen(3000);

TCP 客户端

const net = require('net');const client = net.createConnection(3000, () => {client.write('ping');
});client.on('data', (data) => {console.log(data.toString());
});

适用场景

  • IM / 聊天服务器

  • 游戏服务器

  • 自定义二进制协议

  • 高性能长连接

  • RPC 底层实现


二、http 模块(基于 TCP 的 HTTP 封装)

本质

  • 构建在 net 之上

  • Node 内部:http 👉 使用 net.Socket

  • 自动处理 HTTP 协议细节

特点

  • 面向 请求 / 响应

  • 自带 Header / Body

  • 自动处理:

    • Content-Length

    • Chunked

    • Keep-Alive

    • 状态码


示例:HTTP 服务端

const http = require('http');http.createServer((req, res) => {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('hello http');
}).listen(3000);

HTTP 客户端

http.get('http://localhost:3000', (res) => {res.on('data', chunk => {console.log(chunk.toString());});
});

适用场景

  • Web API

  • 前端接口

  • 后端微服务

  • 管理后台

  • 第三方接口对接


三、核心差异对照表(重点)

对比点nethttp
传输层 TCP TCP
协议 HTTP
数据格式 原始字节流 Header + Body
抽象层级 很低 很高
是否需自己分包 ✅ 要 ❌ 不用
是否有请求响应
是否支持浏览器
使用难度

四、为什么 http 不能完全替代 net

因为 HTTP 不适合所有场景

  • ❌ 实时通信(频繁 Header 开销)

  • ❌ 自定义二进制协议

  • ❌ 超低延迟通信

👉 所以:

  • Web / API → http

  • 底层通信 / 长连接 → net


五、关系图(帮助理解)

应用层├── http 模块(Node)│     └── net.Socket│           └── TCP└── net 模块(Node)└── TCP

六、你可以这样记(口诀)

net 管“怎么传字节”,http 管“怎么传请求”

http://www.rkmt.cn/news/111062.html

相关文章:

  • 从代码到用户手中:我的应用上架实战与核心技能突破之路
  • Dify重排序核心技术解析(20年经验总结的3大选型原则)
  • 音频切片效率提升300%?Dify 1.7.0配置优化实战经验分享
  • 全球USB厂商与设备ID大全
  • 普通耳机秒变AI翻译神器!谷歌Gemini加持,实时翻译还能传情绪
  • 私有化Dify SSL配置全流程(含自签名与CA证书对比实测)
  • 为什么你的Agent服务无法自动扩展?深度解析Docker Compose配置盲区
  • 【运维专家亲授】:Agent服务容器化中数据卷挂载的99%人都忽略的关键细节
  • 晨光文具转型路:从校门口文具店到盲盒新零售,直面名创优品与泡泡玛特竞争!
  • 工业控制系统的智能体革命:从刚性自动化到自主认知的范式迁移
  • GitHub Actions持续集成TensorFlow项目时使用清华源提速
  • Dify+PDF加密权限控制(仅限高级用户掌握的5个关键技术点)
  • 7个常见错误避免,确保YashanDB实施的成功率
  • 成为AI产品经理:程序员不可错过的AI时代红利
  • 【AI邪修·破壁行动】理解领域驱动设计DDD
  • 科研快报 |路侧感知新突破:用“多边形”注意力,让摄像头看得更远更准
  • 构建高可靠软件系统:性能与安全测试的融合与实践
  • LobeChat会话管理功能有多强?多话题并行处理不混乱
  • 抛弃脚本自动化:我们如何用 LangGraph 构建会“自我反思”的接口测试 Agent?
  • 鸿蒙三方库—harmony-utils使用
  • 常见的视频去水印原理
  • R语言下载catboost失败
  • 使用 TensorRT-LLM 高性能部署大语言模型
  • 如何卸载/更新Mac上的R版本
  • ISIS路由的基本配置
  • 磁通切换电机模型:12槽10极全参数化模型与磁场调制原理解析——Maxwell 2021r1中...
  • 2025年数控车床排行:机械手品牌创新力榜单发布,CNC数控机床/空调配件数控机床/无人机配件数控/水暖接头数控机床数控车床设计推荐排行 - 品牌推荐师
  • 6. 接口-专栏说明
  • Flutter实战:打造高颜值电商应用首页
  • 构建高效益自动化测试用例的核心方法论