面试:Websocket

简介

WebSocket 是一种与 HTTP 不同的协议。两者都位于 OSI 模型的应用层,并且都依赖于传输层的 TCP 协议。 虽然它们不同,但 RFC 6455 规定:WebSocket设计为通过 80 和 443 端口工作,以及支持HTTP代理和中介,从而使其与HTTP协议兼容。为了实现兼容性, WebSocket 握手使用 HTTP Upgrade 头从 HTTP 协议更改为 WebSocket 协议。

与HTTP不同,WebSocket 提供全双工通信。此外,WebSocket 还可以在 TCP 之上启用消息流。 TCP 单独处理字节流,没有固有的消息概念。

WebSocket协议规范将 ws(WebSocket)和 wss (WebSocket Secure)定义为两个新的统一资源标识符(URI)方案,分别对应明文和加密连接。

优点

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

连接过程

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

客户端请求

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/

参考链接

  • WebSocket

面试:Websocket相关推荐

  1. Android端发送字符到Wed端,Android面试-socket和websocket

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服 ...

  2. java websocket client,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. websocket 业务提醒 .net_7年.NET 面试 Java 的尴尬历程

    作者:_tom 来源:cnblogs.com/doNetTom/p/12082150.html 先简单介绍LZ 现如今的情况,LZ 1992年出生,2012年实习,大专学渣一枚,实习期直接被校企合作直 ...

  4. 面试:WebSocket相关

    一.WebSocket原理及运行机制与HTTP关系 以下简要介绍一下WebSocket的原理及运行机制. WebSocket是HTML5下一种新的协议.它实现了浏览器与服务器全双工通信,能更好的节省服 ...

  5. PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...

    PHP面试时常涉及的内容总结 熟悉框架 逻辑题 快排  正则 数组函数.... 抽奖, 秒杀 数据库 优化,sql书写 缓存 redis mecache Linux命令 其他技术 sphinx, sw ...

  6. Redis解决websocket在分布式场景下session共享问题

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_45089791/article/ details/118028312 在显示项目中 ...

  7. SpringBoot+WebSocket实时监控异常

    欢迎关注方志朋的博客,回复"666"获面试宝典 写在前面 此异常非彼异常,标题所说的异常是业务上的异常. 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的 ...

  8. WebSocket 集群解决方案

    欢迎关注方志朋的博客,回复"666"获面试宝典 问题起因 最近做项目时遇到了需要多用户之间通信的问题,涉及到了WebSocket握手请求,以及集群中WebSocket Sessio ...

  9. websocket+netty实时视频弹幕交互功能(Java版)

    欢迎关注方志朋的博客,回复"666"获面试宝典 2021年了,还有不支持弹幕的视频网站吗,现在各种弹幕玩法层出不穷,抽奖,ppt都上弹幕玩法了,不整个弹幕都说不过去了,今天笔者就抽 ...

最新文章

  1. linux下移动c盘文件位置,问个问题我在unbuntu下为何找不到windows c盘文件
  2. Python 生成 JWT(json web token) 及 解析方式
  3. Qt之QSlider
  4. 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计
  5. 如何从过滤器中排除URL
  6. hashdos_调查HashDoS问题
  7. 【c】【报错解决】incompatible implicit declaration
  8. Java正则表达式总结
  9. md 生成目录 码云_搭建简易博客方案
  10. 《机器学习实战》配套代码下载
  11. IPSec L2L ××× 之 Router-to-ASA
  12. php原生的异步请求,原生JavaScript实现Ajax异步请求
  13. 如何在Linux操作系统定时重启Tomcat服务?
  14. 【笔记17】使用 jad 工具把 java 的 class 文件转换为 java 文件;使用 luyten 把 java 的 jar 包转换为 java文件
  15. 实际波动率与隐含波动率的计算 python
  16. IDEA修改快捷键方法(在原快捷键不变的基础上增加自己习惯的快捷键)
  17. 谷歌抢注18个“.中国”域名:下一盘很大的棋?
  18. 【毕业设计】总结、展望及参考文献
  19. Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC - apoc.periodic.iterate()过程在4.0版本中的重大变化
  20. jupyter 链接不到服务器_jupyter连接服务器

热门文章

  1. SpringBoot FK-关联表查询(二)
  2. 完整解决方案:让你的IIS 支持PHP方法
  3. 网盘工具比较,以及自己开发的网盘工具[转]
  4. NET脏字过滤算法 收藏
  5. 你应该知道的一些事情——CSS权重
  6. 用JavaScript获取页面上被选中的文字的技巧
  7. 浅谈 PHP 与手机 APP 开发(API 接口开发) 1
  8. 从今天开始学习iOS开发(iOS 7版)-- 构建一款App之App开发过程 (二)
  9. Elasticsearch整理笔记(一)
  10. ubuntu14.04+ceres安裝(亲测)