node net模块,.net和node.js

  node net模块,.net和node.js

  本文带你了解Node中的net模块,希望对你有所帮助!

  node.js速度课程简介:进入学习

  这是nodejs系列的第一篇文章。之前看教程的时候,很多都是从IO,buffer,path,event,fs,process,node事件循环机制开始的。这些确实是node的开发主要依赖的开发依赖。但是我很着急。从学习node开始,也就是说Node可以做后端,但是这些课程前半部分讲的是它的能力,也就是最后介绍的关于如何与客户端通信的模块。

  我觉得很难受,所以我自己写总结的时候,一定要先写服务器和客户端通信的模块。即使流程涉及到event模块和fs模块的知识点,我也可以暂时搁置,只从整体上了解net模块是如何实现通信的。

  

1. OSI 七层协议模型

  要想理解通信模块,就得知道网络通信模型,要想记住网络通信模型,就得练习帮你记住。这是面试的重点。这一块包含了很多内容,你想了解更多。还说需要系统学习。这里只是简单提一下。

  发这张老照片:

  对于我们的前端,我们需要记住TCP/IP协议族的系统结果。

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

  传输层:TCP/UDP

  互联网层:IP,ICMP(IP层的附属协议)

  数据链路层:PPP,SLIP

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

  从ICMP这个依附于IP协议的协议可以知道,对于网络协议的分层,没有必要太过较劲。ICMP显然需要IP协议作为基础,但也是作为网络层来规划的。对于我们正确理解OSI模型,我认为用OSI模型分析问题比分层协议更有意义。

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

  如果角色成为发送方和接收方,传输流程如下:

  可以看出,在传输的过程中,从发送方开始,不经过一层协议,就会添加所需的报头信息。会层层检查,层层加密。然后,当它到达接收器时,它会反其道而行之,在每一层之后剥离相应的报头。只有等到最终获得HTTP数据。

  以上是一般的网络协议模型。

  纳闷:为什么书上和很多地方把OSI系统的成果合并成TCP/IP五层协议后,网络层的名字变成了Internet层?

  

2. TCP 连接

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

  第二次握手:当服务器收到客户端发来的SYN J时,服务器会确认已经收到数据包并发送ACK标志(序列号为J 1)和SYN标志(序列号为K),然后进入SYN_REVD状态(请求接受并等待客户端确认)

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

  

3. net 模块

   net模块是上述TCP连接的具体实现。

  首先,学习API还是建议直接进入正式文档。中文文件的内容不会是最新版本。

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

  client . js touch service . js

3.1 service.js 部分

  引入net模块,让服务器进入LISTENT状态,配置端口号和主机地址(手动跳过DNS解析过程),等待客户端的调用。

  const net=require( net );

  const post=3306

  常量主机= 127 . 0 . 0 . 1 ;

  const server=net . create server();

  server.listen(post,host);此时,服务器对应于TCP连接中服务器的监听状态。

  然后监听一些必要的事件,也就是服务器提供的钩子。(属于事件相关知识)

  server.on(listening ,()={

  Console.log(服务器准备连接);

  });

  server.on(连接,(套接字)={

  Console.log(有客户端访问);

  });

  server.on(close ,()={

  Console.log(服务器关闭);

  });

  server.on(error ,(error)={

  Console.log(服务器有错误:,错误);//error有一个错误消息。

  });上述代码串包括,

  监听:监听端口连接后开始的事件:客户端访问close时触发的事件:服务器关闭触发错误:服务器错误触发对于close,我们要注意后台的老大哥通常是直接的。

  著名图象处理软件

  Kill -9 pid是通过杀死线程来执行的。

  在connection dog中,形参以socket命名。它的中文翻译是嵌套词,按节点封装成流。现在可以大致理解为客户端发送的数据。这个数据本身是有方法的。我处理连接中的套接字。

  server.on(连接,(套接字)={

  Console.log(有客户端访问);

  socket.on(data ,(data)={

  console.log(数据);//客户端发送的数据

  });

  });由于服务器可以接受客户端发送的数据,所以自然可以回复客户端。写在socket.on里(当然也可以写在外面):

  Socket.write(我已经收到你的服务器,客户端);此时,如果客户端已经接受完数据,然后关闭了连接。我们也可以通过socket.on(close) hook监听:

  socket.on(close ,()={

  Console.log(客户端在另一端关闭了流);

  });套接字事件的摘要被放入client.js中.

  此时,service.js的所有内容如下:

  const net=require( net );

  const post=3306

  常量主机= 127 . 0 . 0 . 1 ;

  const server=net . create server();

  server.listen(post,host);

  server.on(listening ,()={

  Console.log(服务器准备连接);

  });

  server.on(连接,(套接字)={

  Console.log(有客户端访问);

  socket.on(data ,(data)={

  console.log(数据);//客户端发送的数据

  Socket.write(我已经收到你的服务器,客户端);

  });

  socket.on(close ,()={

  Console.log(客户端在另一端关闭了流);

  server . close();//客户端已经不需要数据了,那就关闭服务器吧。

  });

  });

  server.on(close ,()={

  Console.log(服务器关闭);

  });

  server.on(error ,(error)={

  Console.log(服务器有错误:,错误);//error有一个错误消息。

  });

3.2 client.js 部分

  客户端简单多了。

  const net=require( net );

  const post=3306

  常量主机= 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(连接关闭);

  });套接字的事件摘要

  连接:与服务器连接成功触发数据:接收服务器发送的参数。end:收到数据后可以触发关闭:socket close触发service.js和client.js框架已经写好了,已经打开两个终端运行的人陆续:

  节点服务. js

  Client.js可以自行检查打印结果。

  整个TCP连接框架已经基本完成。当然,实际产量远不止这些。它还必须处理包粘连、解包/打包、心跳包等等。

  更多关于node的信息,请访问:nodejs教程!以上是对Nodejs中net模块细节的深入分析。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: