WebSocket 入门

一、维基百科
  • WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
  • WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
二、WebSocket 和 HTTP 联系

在这里插入图片描述

  • HTTP协议只能实现客户端请求,服务端响应的这种单项通信。

    • 通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。
    • 在HTTP1.1中进行了改进,使得有一个keep-alive(保持连接),也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。
  • Websocket 和 HTTP 是基于 TCP 协议的,Websocket 借用了HTTP的协议来完成一部分握手。

三、Websocket的作用

先说说yi long poll 和 ajax轮询 的原理

1、ajax 轮询

Ajax 轮询特别简单,就是使用定时任务,不断地使用 HTTP 请求数据,询问服务器是否有新消息

场景再现:

  • 客户端:啦啦啦,有没有新信息(Request)
  • 服务端:没有(Response)
  • 客户端:啦啦啦,有没有新信息(Request)
  • 服务端:没有。。(Response)
  • 客户端:啦啦啦,有没有新信息(Request)
  • 服务端:你好烦啊,没有啊。。(Response)
  • 客户端:啦啦啦,有没有新消息(Request)
  • 服务端:好啦好啦,有啦给你。(Response)
  • 客户端:啦啦啦,有没有新消息(Request)
  • 服务端:。。。。。没。。。。没。。。没有(Response) ---- loop
2、long poll 的原理

long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。

场景再现

  • 客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)
  • 服务端:额。。 等待到有消息的时候。。来 给你(Response)
  • 客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request) -loop
3、轮询缺点
  • 可以很明显看出、轮询不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性。

  • 服务端不能主动联系客户端,只能有客户端发起。

  • 非常消耗资源

    • ajax轮询 需要服务器有很快的处理速度和资源。(如果高并发一直请求需要考虑服务器响应速度)
    • long poll 需要有很高的并发,也就是说同时接待客户的能力。(因为不会主动去关闭,这样就会导致连接越来越多)
4、轮询可能出现的问题
  • 客户端:啦啦啦啦,有新信息么?
  • 服务端:月线正忙,请稍后再试(503 Server Unavailable)
  • 客户端:。。。。好吧,啦啦啦,有新信息么?
  • 服务端:月线正忙,请稍后再试(503 Server Unavailable)
  • 客户端:
5、websocket 原理

为了解决上面的问题,websocket 出现了,解决了服务器被动响应(websocket 是双向通信协议,客户端可以主动发请求到服务端,服务端也可以主动发请求到客户端)

场景模拟:

  • 客户端:啦啦啦,我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)
  • 服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)
  • 客户端:麻烦你有信息的时候推送给我噢。。
  • 服务端:ok,有的时候会告诉你的。
  • 服务端:balabalabalabala
  • 服务端:balabalabalabala
  • 服务端:哈哈哈哈哈啊哈哈哈哈
  • 服务端:笑死我了哈哈哈哈哈哈哈

Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性

实现

实现在我的下一篇博客

来源:知乎

链接:https://www.zhihu.com/question/20215561/answer/40316953

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值