前端需要去了解的nodejs知识(net)

对于前端开发,http服务是我们最长接触的通信服务,偶尔也会用到一些类似于聊天框的长链接应用,这些应用都不是基于HTTP开发的,HTTP是是无状态的短连接,说到长连接是不是首先会想到TCP,TCP是有状态的长连接协议。TCP和HTTP都是有连接的意思就是通信前需要建立连接,但是在计算机网络世界还有种无连接的协议UDP,下面我们就来了解下TCP在nodejs中的应用。

net

TCP(传输控制协议)协议

TCP协议的特点如下:

  • TCP是面向连接的传输层协议
  • TCP是可靠的传输方式,可确保数据不会丢失
  • TCP是一对一的连接的
  • TCP可提供全双工通信(通信双方可以任意时候发送数据)
  • TCP数据传输是面向字节流的
  • TCP是三次握手的连接方式,四次挥手的断开连接方式
    • 三次握手:客户端发送连接请求,服务端同意连接请问并返回到客户端,客户端建立与服务端的连接

前端需要去了解的nodejs知识(net)

  • 四次挥手,TCP释放连接的流程大致如下:Client告诉Server不会再发送数据=》Server告诉Client知道了等我发送完当前数据就关闭=》Server端发送完当前数据释放连接,等待Client确认=》Client确认释放连接,TCP连接关闭

前端需要去了解的nodejs知识(net)

  • 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!"}))

注:Nodejs中的net模块常被用来实现聊天功能,另外我们在一些开源项目常见的socket.io就是基于net模块实现的。

总结

对于TCP协议最常用的应该就是实时聊天系统,另外基于HTTP协议的应用我们都可以认为底层协议是TCP应为HTTP是建立在TCP的基础之上的,理解TCP对于我们前端开发至关重要。