一文聊聊Node中的net模块

node.js中提供了net模块,该模块提供了对tcp、socket的封装与支持。本篇文章就来带大家带大家了解一下node中的net模块,希望对大家有所帮助!

一文聊聊Node中的net模块

我之前看教程的时候,很多都是从 IO、buffer、path、event、fs、process、node 事件循环机制开始说起的. 这些确实是 node 开发主要依赖的开发依赖. 但是我比较着急, 从了解到 node,就是说 node 可以干后端的话,但是这些课程前半截都在说它拥有的能力,就是最后才到如何和客户端通信的模块介绍.

我很难受,所以在我自己写总结的时候,一定要写先服务端和客户端通信的模块才舒服.即便过程中涉及到了 event 模块、fs 模块的知识点,可以暂时搁置,只从整体来理解net模块如何实现通信的.

1. OSI 七层协议模型

想要学明白通信模块,就不得不了解网络通信模型,想要记住网络通信模型,就不得不实际操作来辅助记忆. 这个是面试的重点. 这一块内容很多,想要跟深入的了解,还说需要体系的学习的. 这里只是简单提提。【相关教程推荐:nodejs视频教程、编程教学】

寄出这张老图:

一文聊聊Node中的net模块

对于我们前端而言, 需要记住 TCP/IP 协议簇的体系结果既可.

应用层: http(80 端口)、FTP(21)、SMTP(发送邮件)、POP(接收邮件)、DNS

传输层: TCP/ UDP

网际层: IP,ICMP(是 IP 层的附属协议)

数据链路层: PPP, SLIP

物理层: 网有双绞线、同轴电缆、光纤等传输方式, 遵循 ISO2110 规范

ICMP这种依附于 IP 协议的协议可以知道,对于网络协议的分层不用过于较劲. ICMP明明需要 IP 协议为基础,但是它也被规划为网络层. 我们对于 OSI 模型的正确的认识,我认为应该是用 OSI 模型来进行问题的分析比用来对于协议进行所谓的分层更加来得有意义.

TCP/IP 协议簇 并不是只是指 TCP 和 IP 协议,只是因为这两个协议过于出圈,所以就用 TCP/IP 来统称互联网相关联的协议集合起来. 还有另外一种说法是,在使用 TCP/IP 协议过程中使用到的协议族的统称.

而客户端和服务端的传输流如下

一文聊聊Node中的net模块

如果角色变成发送者接受者的时候,传输流如下图:

一文聊聊Node中的net模块

可以看出来传输的过程中,从发送端开始,没经过一层协议都会加上所需要的首部信息.层层把关,层层加码. 然后到了接收端的时候, 就反而行之, 每经过一层都剥去对应的首部. 只等到最后拿到的 HTTP 数据.

上面图片出自《图解 HTTP》

上面就是大体的网络协议模型.

疑惑: 为什么书上和很多地方在把 OSI 体系结果中合并成 TCP/IP 五层协议之后,网络层的名称会变成网际层呢?

2. TCP 连接

一文聊聊Node中的net模块

第一次握手: 客户端向服务端发送 SYN 标志位(序号是 J), 并进入 SYN_SENT 状态(等待服务端确认状态)

第二次握手: 服务端收到来自客户端的 SYN J, 服务端会确认该数据包已收到并发送 ACK 标志位(序号是 J + 1)和 SYN 标志位(序号是 K), 随后进入 SYN_REVD 状态(请求接受并等待客户端确认状态)

第三次握手: 客户端进入连接建立状态后,向服务端发送 ACK 标志位(K+ 1) , 确认客户端已收到建立连接,服务器收到 ACK 标志后,服务端进入连接已建立状态.

文心一言 文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

文心一言 1008 查看详情 文心一言

J 和 K 都是为了确立是谁在请求. SYN 和 ACK 的结构没有什么不同,只是发送的对象不一样.

3. net 模块

net模块就是对于上面 TCP 连接的具体实现.

首先, 学习 API 依旧推荐直接进入官方文档. 其中中文文档内容不会是最新版本的

在学习的时候,能够有时间看英文文档就尽量看英文文档. 对于这一点我坚持了半年. 从一开始看不下去,直到现在能够可以忍住不舒适感看下去. 半年时间进步就很明显了. 而且这种不舒适感是一件好事,说明这个不是你的舒适区,毕竟勇于跨过自己的舒适区才是进步的源泉

接下来,进行正题.既然要学习通信,那么我们就需要两个对象来模拟客户端和服务端.分别建立client.jsservice.js两个文件. 通过命令行创建:

touch client.js && touch service.js

3.1 service.js 部分

引入net模块,并让服务器进入LISTENT状态, 以及配置端口号和 HOST 地址(手动略过 DNS 解析过程), 等待客户端的召唤

const net = require("net");const post = 3306;const host = "127.0.0.1";const server = net.createServer();server.listen(post, host);

此时服务器对应了 TCP 连接中服务器LISTEN状态.

随后监听一些必要的事件,也就是 server 提供的钩子. (属于 event 相关知识)

server.on("listening", () => {  console.log("服务器已经可以连接啦");});server.on("connection", (socket) => {  console.log("有客户端来访咯");});server.on("close", () => {  console.log("服务器关闭了");});server.on("error", (error) => {  console.log("服务器出错啦: ", error); // error 有错误的信息});

上面这一串代码涉及到了,

listening: 监听端口后出发的事件connection: 有客户端来访的时候触发事件close: 服务器关闭触发error: 服务器出错触发

对于close我们需要注意的是,后台大哥一般是直接

pskill -9 pid

通过杀死线程的方式来进行的

connection狗子中, 形参是 socket 命名. 它的中文翻译为嵌套字, 被 node 封装成了 stream(流).在可以粗浅的理解为就是客户端发送过来的数据. 这是这个数据自身是有方法的. 我在connection中对socket来进行处理

server.on("connection", (socket) => {  console.log("有客户端来访咯");  socket.on("data", (data) => {    console.log(data); // 客户端发送过来的数据  });});

stream 以后的文章会进行介绍.

服务端既然能够接受客户端发过来的数据,自然也能够给客户端回复. 在socket.on中写入(当然也可以写在外面):

socket.write("我已经收到你的服务器了哦,客户端");

此时如果客户端已经完成了数据的接受,然后关闭了连接.我们可以也可以通过socket.on('close‘)钩子监听到:

socket.on("close", () => {  console.log("客户端把另外一头的流给关了");});

对于socket事件的总结放入client.js中.此时service.js的所有内容如下:

const net = require("net");const post = 3306;const host = "127.0.0.1";const server = net.createServer();server.listen(post, host);server.on("listening", () => {  console.log("服务器已经可以连接啦");});server.on("connection", (socket) => {  console.log("有客户端来访咯");  socket.on("data", (data) => {    console.log(data); // 客户端发送过来的数据    socket.write("我已经收到你的服务器了哦,客户端");  });  socket.on("close", () => {    console.log("客户端把另外一头的流给关了");    server.close(); // 客户端已经不要数据了,那么我们就把服务器给关闭了吧  });});server.on("close", () => {  console.log("服务器关闭了");});server.on("error", (error) => {  console.log("服务器出错啦: ", error); // error 有错误的信息});

3.2 client.js 部分

客户端的就简单很多.

const net = require("net");const post = 3306;const host = "127.0.0.1";const socket = net.connect(post, host);socket.on("connect", () => {  console.log("已经连接到服务器了哦");});socket.write("服务器, 我来了");socket.on("data", (data) => {  console.log(data.toString());  socket.end();});socket.on("close", () => {  console.log("连接已关闭了");});

对于socket的事件的总结

connect: 成功和服务器连接触发data: 接受到服务器发过来的参数end: 数据接收完毕之后可以触发close: socket 关闭触发

service.jsclient.js框架已经写完, 那些先后在打开两个终端运行他们:

node service.jsnode client.js

自行查看打印的结果.

整个 TCP 连接的框架大体就已经完成了. 当然实际的生产远远不止这些. 还要处理粘包、拆包/封包, 心跳包等等.

本文转载自:https://juejin.cn/post/7084618854801866765

作者:我是小橘子哦

更多node相关知识,请访问:nodejs 教程!

以上就是一文聊聊Node中的net模块的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/543775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 16:25:49
下一篇 2025年11月9日 16:30:38

相关推荐

  • 虚拟货币的链上分析与风险追踪

    虚拟货币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 在数字货币世界的深邃海洋中,每一次链上交易都如同被记录在永恒账本上的印记。这些印记不仅包含了交易的数额,更承载着丰富的地址交互信息,为我们揭示出隐藏在代码背后的资金流向与潜在风险。理解虚拟货币的链上…

    2025年12月9日
    000
  • 以太坊(ETH)再次未能突破4000美元,交易者因震荡而沮丧,未来如何?

    Binance币安 欧易OKX ️ Huobi火币️ 以太坊价格在4,000美元面临强阻力 以太坊自10月11日触及3,500美元低点后反弹16%,但在4,000美元心理关口附近遭遇抛售,涨势受阻。 据交易员Philakone周一在X平台发文称,“4,000美元有强阻力”。 值得注意的是,ETH/U…

    2025年12月9日 好文分享
    000
  • 一文了解以太坊(ETH)再次未能突破4000美元,交易者因震荡出局而感到沮丧

    Binance币安 欧易OKX ️ Huobi火币️ 以太坊在冲击4,000美元未果后遭遇抛压,由于新增买盘不足以及现货ETF资金持续外流,市场情绪转弱,价格面临进一步下行风险,可能下探至3,100美元。 要点总结: 市场缺乏新买家支撑,叠加以太坊现货ETF连续多日净流出,反映出需求疲软,短期走势偏…

    2025年12月9日 好文分享
    000
  • 以太坊(ETH)价格能否在十月重回4500美元?一文了解

    Binance币安 欧易OKX ️ Huobi火币️ 以太坊价格正冲击4500美元大关,经典技术形态与链上MVRV指标同步释放看涨信号,显示本月上涨动能正在加速回归。 核心要点: ETH从多重支撑交汇区域强势反弹,4500美元目标再度近在咫尺。MVRV定价带显示ETH站稳关键均值区,下一目标直指50…

    2025年12月9日 好文分享
    000
  • 以太坊(ETH)价格预测:能否在十月重回4500美元?

    以太坊价格剑指4,500美元,经典技术形态与链上mvrv指标形成共振,暗示本月上涨动能正在回归。 Binance币安 欧易OKX ️ Huobi火币️ 核心要点: 以太坊自关键支撑区域反弹,4500美元目标再度浮现。MVRV波动带显示ETH站稳均值支撑,下一目标或直指5000美元。 以太坊原生代币E…

    2025年12月9日 好文分享
    000
  • 币圈老手的私藏福利:这些免费行情站真的好用

    在信息高速流动的加密货币市场,及时、准确的行情数据是做出明智决策的关键。本文为你整理了一份币圈资深玩家私藏的免费行情工具清单,它们功能强大且数据可靠,能有效帮助你提升分析和交易效率。 币圈必备的免费行情数据源 1. 币安 (Binance) 作为全球交易量领先的平台,币安不仅是交易的首选,其行情数据…

    2025年12月9日
    000
  • 币圈人必备:10大免费行情网站全收录

    在信息瞬息万变的加密货币市场,及时获取准确的行情数据是每位投资者的核心需求。无论是追踪主流币种的价格波动,还是发掘潜力山寨币,一个强大可靠的行情网站都是不可或缺的工具。本文为您精选了10个币圈公认的顶级免费行情网站,帮助您运筹帷幄,决胜千里。 十大免费行情网站推荐 1. 币安 (Binance)  …

    2025年12月9日
    000
  • 交易所的API接口:自动化交易的利器

    2025主流交易所推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 在高速发展的加密货币市场中,仅仅依靠手动操作已经难以满足专业交易者和机构的需求。这时,交易所提供的API接口便成为了连接交易策略与市场执行的桥梁,它允许用户通过编程方式与交易所进行交互,实现交易的…

    好文分享 2025年12月9日
    000
  • 虚拟货币指标有哪些? 7个指标协助你看懂加密货币市场

    该如何看懂虚拟货币市场状态?你可以从常见指标下手,了解当前币圈情绪。 Binance币安 欧易OKX ️ Huobi火币️ 这篇文章就来深入解析7 个常见的虚拟货币指标,包含:贪婪恐惧指数、山寨季指数、比特币市占率、Total2、Total3、稳定币供应比率、长短期持有者比率,希望能帮助你更了解币圈…

    2025年12月9日 好文分享
    000
  • 2025年BTC价格预测:未来十年走势分析与五大关键因素解读

    随着比特币第三次减半周期进入关键阶段,btcc分析师团队结合链上数据、宏观经济环境和技术指标,对2025-2035年比特币价格走势进行深度研判。本文包含:1)当前价格关键支撑位分析;2)影响长期走势的五大内核因素;3)机构投资者最新持仓动态;4)十年周期价格预测模型。 Binance币安 欧易OKX…

    2025年12月9日
    000
  • David Bailey深度分析:投资者越来越善于识别糟糕的比特币(BTC)财库

    Binance币安 欧易OKX ️ Huobi火币️ 一位比特币财库企业的高管指出,随着市场对“比特币囤积型公司”的追捧热度逐渐降温,投资者正以更严格的标准审视这类企业。 目前全球已有205家上市公司公开披露其持有比特币作为资产储备。然而,这些公司的吸引力正在减弱,部分采用该策略的企业在过去几个月中…

    2025年12月9日
    000
  • 比特币跌破11万美元,市场正在转熊吗?

    10月11日“黑天鹅”事件引发的币市崩盘余波未平,市场对“二次探底”的担忧迅速成真。短短数日后,比特币自反弹高点11.6万美元开启日线四连跌。10月17日下午4时左右,价格一度下探至104,500美元,距离10月11日创下的102,000美元低点仅一步之遥。以太坊同样未能幸免,最低触及3706美元,…

    2025年12月9日 好文分享
    000
  • 比特币11万美元防线失守,市场要转熊了吗?一文分析

    10.11 黑天鹅暴跌之后,市场普遍担心「二探」,短短数日后,暴跌再次来临。10 月 17 日,比特币自反弹后的 11.6 万美元一路日线四连跌,今日下午 4 时许,一度下探至 104500 美元附近,距离 10.11 崩盘低点 102000 美元近在咫尺。eth 同样无法幸免,一度跌至 3706 …

    2025年12月9日 好文分享
    000
  • 比特币(BTC)交易员建议“锁定收益”详细分析,因抄底者在11万美元下方入场

    Binance币安 欧易OKX ️ Huobi火币️ 比特币价格再度跌破11万元大关,进入关键支撑区域测试阶段。数据显示,散户投资者正积极逢低吸纳,而大型持有者则逐渐减缓此前持续的抛售节奏。 核心要点: 比特币市场显现“抄底”意愿,投资者在约11万美元价位附近展现买入兴趣。关键支撑位多次被测试,持续…

    2025年12月9日 好文分享
    000
  • 以太坊精准涨跌预测软件推荐 ETH行情分析预测工具入口

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 推荐Binance、CoinGecko、CoinMarketCap和Glassnode四大工具。Binance提供专业图表与技术分析,后两者聚合市场数据与新闻以把握…

    2025年12月9日
    000
  • 全球数字货币行情一览 这十个免费网站信息最全最快

    在信息爆炸的数字货币市场,快速准确地获取行情数据至关重要。本文为您精选了十个全球顶尖的免费行情网站,它们不仅提供实时价格,还涵盖深度图表、市场分析和行业新闻,帮助您做出更明智的投资决策。 全球数字货币行情网站Top 10 1. 币安 (Binance) 作为全球交易量最大的加密货币交易所,币安不仅是…

    2025年12月9日
    000
  • AI看盘与免费行情软件 十大智能币圈分析工具推荐

    在快节奏的加密货币市场,利用智能分析工具辅助决策变得至关重要。无论是ai驱动的交易信号,还是功能强大的免费行情软件,都能有效帮助投资者捕捉市场动态,优化交易策略。本文将为你推荐十大智能币圈分析工具,助你在投资路上事半功倍。 十大智能币圈分析工具榜单 1. 币安 (Binance) 作为全球领先的加密…

    2025年12月9日
    000
  • 以太坊在企业级应用中的潜力

    在数字经济浪潮席卷全球的当下,区块链技术作为底层基础设施,正以前所未有的速度改变着各个行业。其中,以太坊作为最成熟、最活跃的公链生态之一,其在企业级应用中的潜力吸引了无数目光。它不仅仅是一种加密货币,更是一个可编程的区块链平台,为开发者提供了构建去中心化应用(dapp)的强大工具。那么,以太坊究竟如…

    好文分享 2025年12月9日
    000
  • 虚拟货币行情网站哪个好?十大免费实时行情工具汇总

    在快节奏的虚拟货币市场,实时、准确的行情数据是做出明智投资决策的关键。本文汇总了十个顶级的免费虚拟货币行情网站和工具,它们不仅提供价格信息,还包含深度图表、市场分析和海量数据,帮助您轻松掌握市场脉搏。 十大免费实时行情工具汇总 1. 币安 (Binance) 作为全球领先的虚拟货币交易所,币安不仅是…

    2025年12月9日
    000
  • 最新币圈行情分析网站盘点 十大免费工具助力决策

    在信息爆炸的加密货币市场,及时获取准确的行情数据和专业的分析是做出明智投资决策的关键。本文将盘点十大顶级的免费币圈行情分析网站,这些工具不仅提供实时数据,还包含了深度图表、链上分析和市场情绪指标,能够有效帮助投资者洞察市场动态,把握投资先机。 最新币圈行情分析网站Top 10 1. 币安 (Bina…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信