本文记录对socket,websocket,MQTT,http的简单理解
- TCP/IP网络四层模型
websocket,MQTT,http都位于应用层,是应用层协议,应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
socket并不是一个协议,它位于传输层和应用层之间,英文翻译过来就是套接字,是抽象出来的一种概念。socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在socket接口后面
![](https://img-blog.csdnimg.cn/img_convert/d66773d99b448ccad30372e0ed25b7c6.png)
2、socket和websocket
这二者并没有太大的关系,很多时候会提到socketAPI
在nodejs中,本身就是支持socketAPI的
比如下面的例子,用Nodejs搭建一个简单的httpserver服务器,使用socketAPI来解析http协议
当有应用连接到该服务器的时候,通过socketAPI可以查看请求报文
const net = require("net")//commonjs引入
const server = net.createServer((c) => { });
//监听80端口
server.listen(8001);
server.on("connection", function (socket) {//匿名函数接收是socket,要和下面一致
socket.on("data", function (data) {
console.log(data.toString())//这里必须进行转换,打印出来是请求报文
//响应客户端的请求,其实就是响应报文
socket.write('HTTP/1.1 200 OK\r\n')
socket.write('Content-Type: text/html; charset=UTF-8\r\n\r\n')
socket.write(`<h1>welcome</h1><a href="/admin">进入管理后台</a>`)
socket.end()
})
})
3、websocket和MQTT
这两者都是应用层的协议,是可以直接使用的
websocket是更底层的东西,不需要搭建服务器,可以进行简单的通信
MQTT是基于websocket,MQTT功能更多,适合于构建更复杂的应用,通常需要构建一个服务器,也有免费的,mqtt://test.mosquitto.org,可以自己连接上测试。