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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。