前端需要去了解的nodejs知识(net)
对于前端开发,http服务是我们最长接触的通信服务,偶尔也会用到一些类似于聊天框的长链接应用,这些应用都不是基于HTTP开发的,HTTP是是无状态的短连接,说到长连接是不是首先会想到TCP,TCP是有状态的长连接协议。TCP和HTTP都是有连接的意思就是通信前需要建立连接,但是在计算机网络世界还有种无连接的协议UDP,下面我们就来了解下TCP在nodejs中的应用。
net
TCP(传输控制协议)协议
TCP协议的特点如下:
- TCP是面向连接的传输层协议
- TCP是可靠的传输方式,可确保数据不会丢失
- TCP是一对一的连接的
- TCP可提供全双工通信(通信双方可以任意时候发送数据)
- TCP数据传输是面向字节流的
- TCP是三次握手的连接方式,四次挥手的断开连接方式
- 三次握手:客户端发送连接请求,服务端同意连接请问并返回到客户端,客户端建立与服务端的连接
- 四次挥手,TCP释放连接的流程大致如下:Client告诉Server不会再发送数据=》Server告诉Client知道了等我发送完当前数据就关闭=》Server端发送完当前数据释放连接,等待Client确认=》Client确认释放连接,TCP连接关闭
- TCP应用场合:网页浏览,聊天程序,邮件等需要保证数据准确性的应用
nodejs中的net使用
Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法。
- 服务端,主要流程为:创建服务,监听连接,发送数据,连接断开
const net = require("net");
/**
* 服务端创建连接服务
*/
const server = net.createServer((socket) => {
//监听关闭客户端连接
socket.on("end", () => {
console.log("客户端关闭连接!");
});
//收到的数据是二进制流数据
socket.on("data", (data) => {
console.log("data: ", data.toString());
});
//向所有的客户端发送数据
socket.write("hello, I am server!", () => {});
});
// 设置同时最大连接数
server.setMaxListeners = 99;
server.on("connection", () => {
console.log("新的客户端已接入");
});
server.listen(4000, () => {
console.log("server is listening");
});
- 客户端,主要流程为:连接服务,监听服务端数据,向服务端发送数据,连接断开
const net = require('net');
const client = net.createConnection(4000,'localhost')
//监听服务发来的数据
client.on('data',(data)=>{
console.log('客户端:已成功连接服务端!');
console.log('服务端发来的数据----: ', data.toString());
})
client.on('connect', function(){
console.log('客户端:已经与服务端建立连接');
});
client.on('close', function(data){
console.log('客户端:连接断开');
});
let index = 0;
setInterval(()=>{
if(index === 9){
//断开与服务器的连接
client.end('10条数据已经发送完喽!')
return
}
//客户端给服务端发送数据
client.write(`向客户端发送第${index}条数据`)
index ++
},1000)
// client.end(JSON.stringify({name:"wo shi bao bao a!"}))
总结
对于TCP协议最常用的应该就是实时聊天系统,另外基于HTTP协议的应用我们都可以认为底层协议是TCP应为HTTP是建立在TCP的基础之上的,理解TCP对于我们前端开发至关重要。
转载自:https://juejin.cn/post/7135255176666939422