WebSocket 原理

转载自个人博客,转载请声明,走啊走的记录:WebSocket 原理

背景

以前的网站为了实现推送功能,使用的方法都是轮询。所谓的轮询就是在特定的时间间隔(例如1秒),由浏览器向服务器发出一个 Http request,然后服务器返回最新的数据给客户端浏览器,从而给出一种服务端实时推送的假象。由于Http RequestHeader(请求头)很长,而传输的数据可能很短就只占一点点,每次请求消耗的带宽大部分都消耗在 Header上。从网上资料得知后来还有改进的轮询方法叫做 Comet,使用 Ajax。但这种技术虽然可达到双向通信,但依然需要发出请求,而且在Comet中,普遍采用了长链接,这也会大量消耗服务器带宽和资源。

所以HTML5定义了 WebSocket 协议,以及相关的编程API,能更好的实现双向通信且节省服务器资源和带宽。

注意WebSocket 实际上指的是一种协议,与我们熟知的 Http 协议是同等的一个网络协议。用网络模型结构来解释的话, WebSocketHttp 协议都属于 应用层协议,两者都基于传输层协议 TCP

WebSocket 协议

与HTML5的联系

Html5是指的一系列新的API,或者说新规范,新技术。在这个新规范中定义了一个为了实现双向实时通信的新协议 WebSocket,并且提供了一套 JavaScript API 供开发者来调用实现通信。服务器端的实现由诸如:Tomcat、Jetty等等。

与Http协议的联系

简单概括来看: WebSocket 不是 Http 协议, Http 协议只是被 WebSocket 使用来建立 WebSocket 连接,连接建立了以后客户端与服务器的双向通信就与 Http 无关了。

WebSocket 协议和 HTTP 协议是两种不同的东西,它们的联系如下:

客户端开始建立 WebSocket 连接时要发送一个 header 标记了 Upgrade 的 HTTP 请求,表示请求协议升级。所以服务器端做出响应的简便方法是,直接在现有的 HTTP 服务器软件和现有的端口上实现 WebSocket 协议,重用现有代码(比如解析和认证这个 HTTP 请求。如果在 TCP 协议上实现,这两个功能就要重新实现),然后再回一个状态码为 101 的 HTTP 响应完成握手,再往后发送数据时就没 HTTP 的事了。

作者:长天之云
链接:https://www.zhihu.com/question/20215561/answer/14365823
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处.

例子

下面给出发出建立连接请求时的 requestresponse

注意:下面的请求报文与响应报文中的内容不是完整的报文,而是 WebSocket 基于 Http 请求(响应)报文添加的内容。

浏览器请求

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: null
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13

服务器回应

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://example.com/

WebSocket 原理相关推荐

  1. WebSocket原理及使用场景(转载)

    由轮询到WebSocket 1 轮询 客户端和服务器之间会一直进行连接,每隔一段时间就询问一次.客户端会轮询,有没有新消息.这种方式连接数会很多,一个接受,一个发送.而且每次发送请求都会有Http的H ...

  2. Websocket——原理及基本属性和方法

    Websocket--原理及基本属性和方法 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP ...

  3. 看完让你彻底搞懂Websocket原理

    2019独角兽企业重金招聘Python工程师标准>>> 本文为转载,尊重原作者的著作版权. 偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websock ...

  4. 【HTTP基础】HTTPS原理及WebSocket原理

    由于HTTP没有加密机制,其传输的内容很容易泄漏,并且HTTP协议没法确认通信方,也无法保证接收到的报文在传输过程中是否被篡改,因此HTTPS是在HTTP协议的基础上提供了加密.认证和完整性保护的功能 ...

  5. 看完让你彻底理解 WebSocket 原理,附完整的实战代码(包含前端和后端)

    1.前言 最近有同学问我有没有做过在线咨询功能.同时,公司也刚好让我接手一个 IM 项目.所以今天抽时间记录一下最近学习的内容.本文主要剖析了 WebSocket 的原理,以及附上一个完整的聊天室实战 ...

  6. 深刻理解Websocket原理

    原文: http://www.ihorve.com/?p=508 对Websocket一直很懵逼,前端时间在知乎上看到了一篇文章理解了很多. 一.websocket与http WebSocket是HT ...

  7. 看完让你理解WebSocket原理

    一.先来说一下Websocket是什么?(websocket与http有什么区别呢) WebSocket是html5出的东西(协议),并且是一个持久化的协议(下面将会讲到什么是持久化协议) HTTP是 ...

  8. php websocket 是否在线_看完让你彻底理解WebSocket原理,附实战代码(包含前端和后端)...

    作者:nnngu来源:https://www.cnblogs.com/nnngu/p/9347635.html 1.前言 最近有同学问我有没有做过在线咨询功能.同时,公司也刚好让我接手一个 IM 项目 ...

  9. websocket原理

    WebSocket协议是基于TCP的一种新的协议.它实现了浏览器与服务器全双工(full-duplex)通信.其本质是保持TCP连接,在浏览器和服务端通过Socket进行通信. 1.启动客户端 < ...

最新文章

  1. C语言文件实验要求,实验教学的目的和要求.doc
  2. 蓝桥杯算法训练_2的次幂表示+前缀表达式+Anagrams问题+出现次数最多的整数
  3. VTK:Video之FFMPEG
  4. AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...
  5. [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio
  6. 子集生成 --二进制法
  7. jsonwebtoken jwt token 简单加密
  8. WebService技术详解CXF
  9. Python学习之路和隐藏特征
  10. mysql自动定时备份数据,mysql数据库自动定时备份脚本
  11. 插入排序算法(C实现)
  12. 机器学习定义及常用算法
  13. Android多线程基础知识详解(傻瓜教程)
  14. 关于今日头条小程序(字节跳动小程序)相关问题
  15. php获取银行logo,依据银行卡号获取银行信息php代码
  16. 推荐几个学习GIS的社区
  17. websphere多应用域名绑定
  18. besiege机器人_《围攻》双脚机器人制作图文教程 双脚机器人怎么制作
  19. ORA-01002 “fetch out of sequence”关于cursor的一个bug
  20. 海洋cms php环境 多少,海洋cms

热门文章

  1. java中各种vo举例_了解JAVA中的POJO,Entity,PO,VO,DTO,DM包括代码举例展示
  2. oracle除法向上取整函数,ORACLE取整函数
  3. php putcontent,PHP函数file_get_content及file_put_content介绍
  4. FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证
  5. HDLBits 系列(33)Sequence Recognition with Mealy FSM
  6. 【 Sublime Text 】如何使用Sublime Text直接生成Verilog例化模板
  7. shell脚本中获取当前所在目录地址
  8. UVa 164 - String Computer
  9. Docker学习笔记 — Docker私有仓库搭建
  10. 出现 java.util.ConcurrentModificationException 时的解决办法