网络协议的研究与应用:web-socket浅析

74 阅读2分钟

简介

首先提出一个问题:websocket是什么?

大家经常听到的,大学里学到的都是socket,那么socket又是干什么的呢?

这里简单的说一下,其实为了解决计算机之间的通讯。生活中,我们知道了对方的地址,但是如果想要寄出(收到)信件,也要邮递员的协助下我们才能进行收发这样的一个操作。那么socket就是充当着一个’邮递员‘的角色,我们把ip+port告诉他后,他就可以帮我们收发信息。在计算机层面来讲,socket就是为了使用tcp、udp等好些协议而被抽象出来的一套API。

那么回到我们主题上来,web-socket听着就有点socket的味道。没错,在使用上他们的功能是非常的相似,都是为了可以让程序之间的进行实时通讯。web-socket基于tcp协议实现的一种技术web端与服务器之间通讯的技术,主要解决的是h5用户与服务器之间的一个实时全双工通讯。

剖析

连接:ws在第一次发起握手连接的时候通过http标准请求头传输一些ws的版本信息,地址等相关字段,后续成功后会升级为ws协议进行连接通讯等。

特点:

  • 没有同源限制:客户端可以与任意服务器通信。
  • 发送内容不限:可以发送文本,也可以发送二进制数据
  • 全双工通讯:不再限制于request-response这种方式
  • 传输:区别于http协议,连接一次之后的传输都可以省略掉http头相关数据

实际应用

比较古早的web端页面,如果要实现一些比如留言板的实时展示的需求,一般情况下就是通过一个轮训去做一个定时请求接口拉取数据,然后对比本地数据后过滤出新的数据展示到页面中。但是这样一来也相当于加重了服务器的一个负载,不管有没有数据,都需要定时去请求接口。

现在对一些实时性比较高的应用,一般都采用web-socket去做一个通讯,一有新的数据后端可以直接推送到前端页面中展示。

涉及到的一些使用场景:

  1. 某些实时性要求较为高的一些展示页面,比如金融系统、救援救灾的指挥系统
  2. 聊天功能模块、视频、音频等等
  3. 在线多人编辑协作工具,比如一些office类的协助网站,项目进度管理等等