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

在 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 管“怎么传请求”

posted @ 2025-12-16 19:15  jerry-mengjie  阅读(16)  评论(0)    收藏  举报