2023-2更文19-websocket介绍

258 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情

websocket介绍

前文

本文内容主要是关于websocket连接的一些内容的总结。

什么是websocket

websocekt是基于单个tcp连接下的全双工通信协议,也就是连接的客户端和服务器两端,都可以主动进行消息的发送。根据分层模型来说,它与http、rpc等同样位于应用层,传输层可以采用tcp、udp等等传输层协议。相比http,它增加了服务器向客户端的主动消息推送,同时采用了类似http1.1中传输层的单tcp连接的方式,因此实际上websocket的连接过程中,首先是发送一条http请求,并在请求中进行升级命令的指定,提示服务器进行请求升级为websocket。提到服务器的主动推送,可能也会联想到http2.0。但http2.0必须是客户端先发起请求后服务器进行推送,同时推送的数据只能存储在缓存当中,断开时也无法进行明显的中断处理。而websocket可以由服务器直接进行消息推送,推送的内容可以在代码中处理,断开时有对应的回调函数用于后续逻辑的处理。

websocket与socket

socket其实是在传输层与应用层之间的一组api,向应用层提供接口进行调用,websocket实际上就是实现了socket所提供的接口。而socket实际是对于内核层中方法的接口封装。每建立一个socket连接,也就在内核层建立一个sock,内核层实际是采用ip+端口来进行地址的绑定,也就是socket实际中文含义的套接字。linux的底层将一切实际上都看作文件的处理,socket的底层sockfs也不例外。实际上socket所对外封装的接口,就是内核层对于文件处理的接口。

websocket与socketio

socketio与websocket实际上都是应用层上的协议,socketio可以认为对websocket进行了一定的加工升级,使得websocker的相关接口变得更为易用,在底层增加了一些逻辑处理。但要注意的是,websocker与socketio的客户端和服务器实际是不能互相连接的,由于存在内容的加工,二者中的逻辑已经出现的比较大的区别。

总结

本文主要是对于websocket的相关知识进行了初步的介绍,包括websocket本身和其底层的socket等等信息。