面试:Websocket
面试: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相关推荐
- Android端发送字符到Wed端,Android面试-socket和websocket
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服 ...
- java websocket client,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- websocket 业务提醒 .net_7年.NET 面试 Java 的尴尬历程
作者:_tom 来源:cnblogs.com/doNetTom/p/12082150.html 先简单介绍LZ 现如今的情况,LZ 1992年出生,2012年实习,大专学渣一枚,实习期直接被校企合作直 ...
- 面试:WebSocket相关
一.WebSocket原理及运行机制与HTTP关系 以下简要介绍一下WebSocket的原理及运行机制. WebSocket是HTML5下一种新的协议.它实现了浏览器与服务器全双工通信,能更好的节省服 ...
- PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...
PHP面试时常涉及的内容总结 熟悉框架 逻辑题 快排 正则 数组函数.... 抽奖, 秒杀 数据库 优化,sql书写 缓存 redis mecache Linux命令 其他技术 sphinx, sw ...
- Redis解决websocket在分布式场景下session共享问题
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_45089791/article/ details/118028312 在显示项目中 ...
- SpringBoot+WebSocket实时监控异常
欢迎关注方志朋的博客,回复"666"获面试宝典 写在前面 此异常非彼异常,标题所说的异常是业务上的异常. 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的 ...
- WebSocket 集群解决方案
欢迎关注方志朋的博客,回复"666"获面试宝典 问题起因 最近做项目时遇到了需要多用户之间通信的问题,涉及到了WebSocket握手请求,以及集群中WebSocket Sessio ...
- websocket+netty实时视频弹幕交互功能(Java版)
欢迎关注方志朋的博客,回复"666"获面试宝典 2021年了,还有不支持弹幕的视频网站吗,现在各种弹幕玩法层出不穷,抽奖,ppt都上弹幕玩法了,不整个弹幕都说不过去了,今天笔者就抽 ...
最新文章
- linux下移动c盘文件位置,问个问题我在unbuntu下为何找不到windows c盘文件
- Python 生成 JWT(json web token) 及 解析方式
- Qt之QSlider
- 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计
- 如何从过滤器中排除URL
- hashdos_调查HashDoS问题
- 【c】【报错解决】incompatible implicit declaration
- Java正则表达式总结
- md 生成目录 码云_搭建简易博客方案
- 《机器学习实战》配套代码下载
- IPSec L2L ××× 之 Router-to-ASA
- php原生的异步请求,原生JavaScript实现Ajax异步请求
- 如何在Linux操作系统定时重启Tomcat服务?
- 【笔记17】使用 jad 工具把 java 的 class 文件转换为 java 文件;使用 luyten 把 java 的 jar 包转换为 java文件
- 实际波动率与隐含波动率的计算 python
- IDEA修改快捷键方法(在原快捷键不变的基础上增加自己习惯的快捷键)
- 谷歌抢注18个“.中国”域名:下一盘很大的棋?
- 【毕业设计】总结、展望及参考文献
- Neo4j图数据库高级应用系列 / 服务器扩展指南 APOC - apoc.periodic.iterate()过程在4.0版本中的重大变化
- jupyter 链接不到服务器_jupyter连接服务器