网络异常,图片无法展示
|
对于前端开发,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对于我们前端开发至关重要。