当前位置: 首页 > 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.jsqmd.com/news/100328/

相关文章:

  • Dify重排序核心技术解析(20年经验总结的3大选型原则)
  • 从代码到用户手中:我的应用上架实战与核心技能突破之路
  • 背包DP
  • yolov5实现游戏图像识别与后续辅助功能
  • AI 手机技术拆解:豆包手机 vs AutoGLM,两条“AI 手机”技术路线深度拆解
  • 音频切片效率提升300%?Dify 1.7.0配置优化实战经验分享
  • 全球USB厂商与设备ID大全
  • 抖音代运营服务商-官方百科
  • 普通耳机秒变AI翻译神器!谷歌Gemini加持,实时翻译还能传情绪
  • 论面向服务的体系结构在系统集成中的应用
  • 使用LabelImg工具标注数据(游戏辅助脚本开发)
  • Dify对接Spring AI总失败?一文看懂版本依赖的4大雷区
  • 30亿参数小模型如何媲美千亿级大模型?Nanbeige4-3B的技术突破与实践指南
  • Python期末复习:30个核心知识点完全详解
  • 私有化Dify SSL配置全流程(含自签名与CA证书对比实测)
  • 为什么你的Agent服务无法自动扩展?深度解析Docker Compose配置盲区
  • 想提升Agent集成效率?Dify元数据定义必须搞懂的5个技术细节
  • 吉时利DMM7510 DMM6500数字万用表
  • 科研少走弯路:智慧芽新药情报库到底值不值?
  • 【珍藏版】AI大模型学习路线大全:从入门到精通,附104G免费资源包
  • 【运维专家亲授】:Agent服务容器化中数据卷挂载的99%人都忽略的关键细节
  • 为什么99%的量子计算项目忽略镜像缓存?这3个致命后果你承担得起吗?
  • 揭秘R Shiny多模态报告生成:如何在5步内构建高可用、可复用的智能报告系统
  • 阿里开源的Mobile-Agent:让AI帮你操作手机电脑,这个工具太强了
  • 特长生 VS 全科生:AI与AGI的本质区别,一张文说清
  • COMSOL多物理场下的锂枝晶模型:单枝晶定向生长分析及文献参考
  • 晨光文具转型路:从校门口文具店到盲盒新零售,直面名创优品与泡泡玛特竞争!
  • 别发朋友圈了!懂行的人都在这里发布动态,用这个“隐形”圈子小程序优化私域资源的运营策略!
  • (Dify权限校验避坑指南):那些官方文档不会告诉你的细节
  • wordpress原生主题二次开发常用到的一些知识点