一、最近有个技术的朋友,每次搞技术讨论都在谈什么WebSocket,然而并没有对它有全面清晰的人数,凡是口口相传的东西都是会有问题的。
下面就给大家权威分析一下。
二、对一种技术的了解,最好的方式,首选官网,其次百科
官网地址:Socket.IO
官网有详细的具体实现。
官网有句话:
Socket.IO enables real-time bidirectional event-based communication.
It works on every platform, browser or device, focusing equally on reliability and speed.
译:Socket的流,能够基于事件,进行实时双向的通信。
它能够在很多平台工作,浏览器或者客户端,都能够有可靠和快速的表现。
主要有以下几个方面的优点:
1.Real-time analytics(实时数据分析)
Push data to clients that gets represented as real-time counters, charts or logs.
(在给客户端推送数据的时候,能够获得实时的计数、图表和日志信息)
2.Instant messaging and chat(即时通讯和交流)
Socket.IO’s “Hello world” is a chat app in just a few lines of code.
用Socket.IO发送一条消息,只需要几个字节就够了,很快很轻量
3.Binary streaming(二进制流)
Starting in 1.0, it’s possible to send any blob back and forth: image, audio, video.
(从1.0版本开始,支持二进制文件的传递,支持图片、声音和视频的传递)
4.Document collaboration(文件协作)
Allow users to concurrently edit a document and see each other’s changes.
允许用户实时编辑文档,并且给其他人看到文档的修改的地方。
三、看看维基百科是怎么介绍这个的
维基百科:WebSocket
四、一句话描述
WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通訊協定於2011年被IETF定為標準RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定為標準。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以建立持久性的连接,并进行双向数据传输。

五、背景
现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

Websocket使用ws或wss的统一资源标志符,类似于HTTPS,其中wss表示在TLS之上的Websocket。如:

ws://example.com/wsapi
wss://secure.example.com/

Websocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。

六、优点
较少的控制开销。在连接建立后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。
更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。
保持连接状态。于HTTP不同的是,Websocket需要先建立连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。

七、握手协议
WebSocket 是独立的、建立在 TCP 上的协议。
Websocket 通过 HTTP/1.1 协议的101状态码进行握手。
为了建立Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。

八、一个握手的例子
一个典型的Websocket握手请求如下:
客户端请求

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
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-Location: ws://example.com/

字段说明

Connection必须设置Upgrade,表示客户端希望连接升级。
Upgrade字段必须设置Websocket,表示希望升级到Websocket协议。
Sec-WebSocket-Key是随机的字符串,服务器端会用这些数据来构造出一个SHA-1的信息摘要。把“Sec-WebSocket-Key”加上一个特殊字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然后计算SHA-1摘要,之后进行BASE-64编码,将结果做为“Sec-WebSocket-Accept”头的值,返回给客户端。如此操作,可以尽量避免普通HTTP请求被误认为Websocket协议。
Sec-WebSocket-Version 表示支持的Websocket版本。RFC6455要求使用的版本是13,之前草案的版本均应当弃用。
Origin字段是可选的,通常用来表示在浏览器中发起此Websocket连接所在的页面,类似于Referer。但是,与Referer不同的是,Origin只包含了协议和主机名称。
其他一些定义在HTTP协议中的字段,如Cookie等,也可以在Websocket中使用。

九、目前就到这里了,学习一个技术千万不要道听途说,一定要先去官网,获取第一手的消息。

Socket权威分析(官方分析,少道听途说)相关推荐

  1. linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)

    1. 什么是系统调用 操作系统通过系统调用为运行于其上的进程提供服务.当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始执行一个 内核函数 . 内核函数负责响应应用程序的要求,例如操作文 ...

  2. AI作曲基础-Python编程作曲软件篇-FoxDot文档及源码分析-官方教程01

    AI作曲基础-Python编程作曲软件篇-FoxDot文档及源码分析-官方教程01 前言 本系列系列目录放在文尾: 本系列是AI作曲的基础,暂时和AI关系不大,但尤为重要: 借助FoxDot,从文档分 ...

  3. 软件方法(下)分析和设计第9章分析 之 分析类图——案例篇(20211228更新)

    软件方法(下)分析和设计第8章分析 之 分析类图--知识篇(20211227更新) 鸳鸯扣,宜结不宜解 <身似摇红烛影>,词:唐涤生,曲:王粤生,唱:红线女,1954 可到此处下载本文档最 ...

  4. linux服务器宕机分析/性能瓶颈分析

    linux服务器宕机分析/性能瓶颈分析 服务器宕机原因很多,资源不足.应用.硬件.系统内核bug等,以下一个小例子 服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因 1.last re ...

  5. iis日志字段解析 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)

    网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置) https://www.cnblogs.com/fuqiang88/p/5870306.html 我们只能通过各种系统日志来分析网 ...

  6. 五步移相法matlab程序_用MATLAB软件对逆变电路移相调压进行仿真,30°,60°,90°的波形,并用分段分析法分析其原理_学小易找答案...

    [简答题]Translate the following ad into (1) a TV comercial, and (2) a factual introduction. Marie Franc ...

  7. 软件方法(下)分析和设计第8章连载[20210816更新]分析 之 分析类图——知识篇

    墙上挂了根长藤,长藤上面挂铜铃 <长藤挂铜铃>:词:元庸,曲:梅翁(姚敏),唱:逸敏,1959 您在阅读<软件方法>时如果发现错误,欢迎通过微信umlchina2告知.如果作者 ...

  8. php 生存分析,生存分析与R--转载

    生存分析与R 生存分析是将事件的结果和出现这一结果所经历的时间结合起来分析的一类统计分析方法.不仅考虑事件是否出现,而且还考虑事件出现的时间长短,因此这类方法也被称为事件时间分析(time-to-ev ...

  9. 静态代码分析工具列表分析---代码分析工具列表(30款工具)

    本文是一个静态代码分析工具的清单,共有30个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...

  10. 第七章:小朱笔记hadoop之源码分析-hdfs分析 第三节:hdfs实现分析

    第七章:小朱笔记hadoop之源码分析-hdfs分析 第三节:hdfs实现分析 3.3 namenode (1)FSDirectory FSDirectory用来管理HDFS整个文件系统的namesp ...

最新文章

  1. java swing 右键_java swing制作右键菜单
  2. 面向对象 - 1.面向过程/2.面向对象/3.如何使用类/4.__init__方法/5.属性查找/6.补充知识/7.可扩展性高...
  3. 流放之路材质过滤怎么设置_房子装修,前置过滤器怎么选?看这6个要点
  4. python3.6基础知识_python的基础知识
  5. 发现2017年最好的CSS框架
  6. 服务器芯片组c621,三路千兆LAN:GIGABYTE 技嘉 发布 C621-SU8 服务器主板
  7. GPS信号防丢失、干扰和欺骗——基于雷达的解决方案
  8. EDA实验:(DTTIMES)数字秒表的设计
  9. 哈夫模型-arcgis
  10. [SCU 4507] 奶牛情书 (AC自动机)
  11. 华为手机序列号前三位_华为Nova2s手机序列号前六位是TPG4C1是什么意思
  12. cite、q、blockquote之间的区别
  13. PHP-用ThinkPHP和Bootstrap实现用户登录设计
  14. 【点赞收藏】36个顶级数据分析方法与模型!
  15. 土星环年龄很轻?卡西尼号探测船坠毁前传送珍贵数据
  16. 无法启动此程序,因为计算机中丢失pthreadVC2.dll
  17. Nginx(二)配置虚拟主机
  18. apache atlas 官方安装
  19. java中变量私有化
  20. Oracle 保留两位小数详解

热门文章

  1. Extjs 3.3 隐藏工具栏 出现Bug 的解决方法
  2. 2009年三季度上市公司报表3
  3. 【英语】英语写作——结尾
  4. 如何编写一个 Webpack Loader
  5. 虚拟搭建局域网模拟器_利用Packet Tracer模拟器搭建小型企业局域网实验
  6. 中兴启示:施一公曾说我们最大危机是精英都想干金融
  7. 【观察】驱动金融科技再创新,迎接金融服务新时代
  8. Qt样式表之 QSS 语法介绍;QLineEdit、
  9. 基于ESP32 CAM的人脸识别考勤系统
  10. “Web3.0元宇宙,与中国有关”