WebSocket

  • 1.概述
  • 2.WebSocket握手
  • 3.Fin分片

1.概述

HTTP协议的弊端:仅支持客户端发起请求,服务器回复响应, 不支持服务器主动向客户端发送消息。

如果客户端想要获取服务器发送的消息,需要通过频繁的JavaScript和AJAX请求实现轮询效率较低

HTTP1.1之前一个request一个response后, HTTP连接就结束了,HTTP1.1后使用长连接, 一次HTTP连接可以发送和接收多个request和response, 但二者数量始终相等, 以上两种轮询方式都比较浪费资源

WebSocket是HTML5新增的协议, 它允许客户端和服务器直接进行全双工通信, 任何一方都可以通过连接将数据推送到另一端

WebSocket 特点

  • 全双工通信
  • 握手阶段采用HTTP协议, 默认端口也是80(ws)和443(wss), 因此与HTTP协议有良好的兼容性
  • 数据格式较轻量, 性能开销小, 通信高效

2.WebSocket握手

WebSocket利用HTTP协议来建立连接

请求报文

GET ws://www.zhangshuo.fun/chat/2 HTTP/1.1   请求行
Host: www.zhangshuo.fun
Connection: Upgrade
Upgrade: websocket
Origin: http://localhost:8080
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: Zjy6wfxsecUZfUE9fx9yBQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Connection: Upgrade 表示要升级协议

Upgrade: websocket 表示协议要升级为websocket

Sec-WebSocket-Version: 13 表示协议版本

Sec-WebSocket-Key 随机生成, 用于标识这个链接

响应报文

HTTP/1.1 101
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: 2BObMdUfPogZU5MGvSfQQm1dmGk=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15

响应码101表示HTTP协议即将被更改为WebSocket协议

到此一个WebSocket连接就建立成功

TCP协议本身就是全双工通信, 但建立在TCP之上的HTTP协议的请求-响应机制限制了全双工通信, 因此WebSocket连接建立后, 就不再使用HTTP协议的机制了, 而是直接发送数据通信.

3.Fin分片

WebSocket的每条消息有可能被切分为多个数据帧, WebSocket 根据FIN判断当前数据帧是否为最后一个, Fin = 1 表示已经收到完整消息, Fin = 0 表示接收方还需要继续监听接收其余的数据.

opcode在数据交换的场景下,表示的是数据的类型。0x01表示文本,0x02表示二进制。而0x00比较特殊,表示延续帧, 即消息还未接收完

【计算机网络】WebSocket 全双工通信协议相关推荐

  1. 强烈推荐|websocket 全双工通信协议详解

    一. 前言 在开发中,我们经常会遇到这样一类需求:需要在网页上显示天气预报,股票数据或者实时排行榜单等实时变化的数据.对于此类需求,一种较为原始的做法就是让客户端每隔一段时间主动去轮询服务器.但这种做 ...

  2. 一文了解websocket全双工通信java实现socket地址404问题解决

    websocket介绍 1.websocket介绍 1.1注解介绍 2.demo 2.1 后端代码 2.2 前端代码 2.3 效果 附录:socket地址404问题解决 1.websocket介绍 W ...

  3. websocket全双工通信简介

    本文摘自百度百科和<spring实战> 简介 websocket protocol是html5的一种新的协议,它实现了浏览器和服务器的全双工通信(full-duplex),它能够实现web ...

  4. 【计算机网络】网络通信协议

    文章目录 1.协议 2 .网络协议 3. 协议分层 3.1. OSI 七层模型 3.2 TCP/IP 五层模型 4 .数据封装与分用 1.协议   "协议" 是一种约定.计算机之间 ...

  5. 计算机网络典型的通信协议有,常用的通信网络协议有哪几种

    通信网络协议为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言.常用的通信网络协议有哪几种?计算机网络安全有哪些基本注意事项,一起和佰佰安全网看看吧. 常用的三个通信网络 ...

  6. 计算机网络全景图-网络通信协议

  7. 计算机网络winsock全双工通信C语言

    原文为单工通信,但时间太久找不到了,后为我修改成为双工,原作者看到私聊我! 当时在把单工变成双工时总是在琢磨怎么边收边发,后来好朋友指点多线程+教学+查资料才学会,与单工通信相比,增加线程即可. 效果 ...

  8. 2022年9月高频前端面试题总结

    前端面试中最常问面试题.核心手写代码,看这一个就够了. 从几十套的面经中挑选出反复提到过多次的问题,确保在最短的时间内掌握最大的部分,整理不易还望 点赞收藏!!! 文章目录 前端面试中最常问面试题.核 ...

  9. SpringBoot 2.0+ /springframwork 5 自带的websocket, 实现后台主动推消息给前端,及前端发消息给后台(全双工模式通信)

    java实现 websocket 全双工模式的通信,除了 springframwork 5 自带的websocket,还可以用Tomcat 7+ 来实现,但 tomcat 7 onOpen() ,on ...

最新文章

  1. python3 自动化交互模块 pexpect 简介
  2. java编程题有难度的_算法与编程面试题 不喜勿喷 难度指数:*****...
  3. C语言计算月份天数if,阅读下列说明,回答问题1至问题3。【说明】 以下代码由C语言书写,能根据指定的年、月计算当月所含天数 - 赏学吧...
  4. Kubernetes的Device Plugin设计解读
  5. Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider
  6. 一次性奖励300万?成都市武侯区促进文化产业发展系列政策影视产业专项政策出来了
  7. 2021年软件测试工具总结——测试管理工具
  8. H5中启动Android app
  9. 5款好用的项目管理软件推荐
  10. 常用web服务器架构理解
  11. MaxScript入门指引系列(五)数组和Visual MaxScript editor
  12. Dell xps13 win10 安装于PCI-E SSD
  13. 大话西游究竟讲了一个什么故事
  14. GMap.NET入门详细教程【2】-------- 初始化并加载一张地图
  15. Python入门(第一节课)
  16. 吉首大学新星杯L题 小李子的老年生活【容斥好题(只是问题比较裸)】
  17. 树的应用 —— 树、森林与二叉树的转换
  18. Seneor曝光基础知识
  19. python程序设计论文_【程序设计论文】程序设计论文范文(共40篇)
  20. STM32开发日记001:ARM和单片机之间的关系

热门文章

  1. Real-Time Rendering 4th 译文《二 图形管线》
  2. Linux 操作系统 Centos7.6安装教程详细Linux系统安装磁盘分区IP配置SSH互信NTP时间服务器关闭图形界面关闭防火墙配置hosts文件
  3. “国稻种芯”-517功能性苦瓜稻 江西测产株高大穂粒多结实高
  4. xposed框架微信发送消息功能实现
  5. Android设备上直接运行C/C++程序,无需ROOT!!!
  6. 大物热力学基础笔记_1
  7. Python time和datetime用法小结
  8. 微信小程序分享海报/卡片 生成时一直加载可能存在的问题
  9. 【JavaWeb】TableDemo 表格隔行显色+鼠标悬停高亮显示
  10. Mysql查询结果按指定的id列排序