什么是websocket

《websocket协议详解》教程分三篇:

  1.  什么是websocket
  2. websocket协议规范
  3.  用vb编写websocket客户端示例(每秒百万弹幕吞吐量)

文章上方有详细的规范、源码链接,你有任何问题可以联系我:邮箱:952125505@qq.com ,QQ交流群:715895604


概念

WebSocket协议是一个安全通信模型,用来实现客户端与服务器之间的全双工通讯。它基于TCP传输协议,并复用HTTP的握手通道。如果你是小白,就理解为:一种让浏览器和服务器拥有实时交换数据的技术。或者你就记住它:

  1. 安全:可以在web浏览器中使用
  2. 实时:全双工通讯
  3. 简单:一次握手,持久连接

背景

在websocket之前,常见的实时通讯方案:

第一种是传统轮询模式,如下图

第二种是长轮询模式,如下图

第三种是SSE模式,它能很好实现实时传输数据的目的。但SSE只支持服务器到客户端单向的事件推送,而且所有目前版本的IE都不支持SSE。

鉴于以上方案,都不是应用于web浏览器应用的真正的全双工协议,websocket便应运而生。websocket设计目的就是用来替代http实现全双工通讯的。我们知道,http是单向请求,只能是客户端发起,服务端处理并响应。而websocket建立连接后,客户端和服务端是完全平等关系,客户端可以向服务端发送和请求数据,服务端也可以向客户端发送和请求数据。http好比对讲机,只能单向通话。websocket好比手机,可以实时双向通话。

全双工通讯是websocket与http最大的不同,同时他们之间还有许多相同之处,都是基于tcp传输协议,握手都采用http协议,默认端口都是80和443,都只能由客户端发起连接

优点

(以下引用百度百科关于websocket优点介绍:)

较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。

更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。

保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。

更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。

可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。

更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。

 

应用

  1. 数据传输实时性要求较高的场合,如聊天、直播等。
  2. 推送类应用的场合,如网站消息通知,邮件提醒等。
  3. 实时监控、统计场合,如统计用户行为。

websocket的全双工特性,与http良好的承启关系,注定它将在未来web应用中大展拳脚,更多应用等你发现。

 

 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值