目录

简介

一、WebSocket是什么?

二、使用WebSocket

1.WebSocket工作原理

1.1 握手(建立连接)

1.2 数据传输

2.WebSocket

2.1 事件

2.2 方法

2.3 属性

3.WebSocket优点

4.WebSocket的使用场景


简介

websocket是html5提供的一种浏览器与服务器进行全面双工通讯的网络技术,是基于TCP传输的应用层协议


一、WebSocket是什么?

WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。

http是一种无状态,无连接,单向的应用层协议,它采用了请求/响应模型,通信请求只能由客户端发起,服务端对请求做出应答处理。这样的弊端显然是很大的,只要服务端状态连续变化,客户端就必须实时响应,都是通过javascript与ajax进行轮询,这样显然是非常麻烦的,同时轮询的效率低,非常的浪费资源(http一直打开,一直重复的连接)。

于是就有了websocket,它是一种全面双工通讯的网络技术,任意一方都可以建立连接将数据推向另一方,websocket只需要建立一次连接,就可以一直保持

二、使用WebSocket

1.WebSocket工作原理

1.1 握手(建立连接)

web浏览器和服务器都必须使用websocket来建立维护连接,也可以理解为HTTP握手 (handshake)和TCP数据传输

  1. 浏览器向http一样发起一个请求,等待服务器响应
  2. 服务器返回握手响应,告诉浏览器将后续的数据按照websocket的制定格式传输过来
  3. 服务器接收到了之后,服务器与浏览器之间连接不中断,此时连接已经是双工的了
  4. 浏览器和服务器由任何需要传输的数据时使用长连接来进行数据传递;

这里说它是HTTP握手,是因为浏览器和服务器在建立长连接的握手过程是按照HTTP1.1的协议发送的,有Request,Request Header, Response, Response Header。但是不同的Header里面的字段是有特定含义的。

说它是TCP传输,主要体现在建立长连接后,浏览器是可以给服务器发送数据,服务器也可以给浏览器发送请求的。当然它的数据格式并不是自己定义的,是在要传输的数据外层有ws协议规定的外层包的。

1.2 数据传输

                一旦WebSocket客户端、服务端建立连接后,后续的操作都是基于数据帧的传递。这样做有几个好处:

1.数据可以进行分片传输,每条消息可能被切分成多个数据帧,这样就不用考虑数据大小导致的长度标志位不足够的情况。

ps :FIN=1表示当前数据帧为消息的最后一个数据帧,此时接收方已经收到完整的消息,可以对消息进行处理。FIN=0,则接收方还需要继续监听接收其余的数据帧;

2. 和http的chunk一样,可以边生成数据边传递消息,即提高传输效率;

2.WebSocket

        2.1 事件

        ***@ServerEndpoint这个注解用来标记一个类是 WebSocket 的处理器。

  1. Open(@onOpen):服务器响应websocket的请求会触发
  2. Message(@onMessage):当消息被接收时会触发
  3. Close(@onClose):当连接关闭时会触发,关闭之后,服务端和客户端就不能发消息了
  4. Error(@onError):发生错误会触发,并会告诉你错误的原因

        2.2 方法

  1. send():一旦服务器与客户端建立连接(open)之后,就可以使用其发送消息了,发送的消息都是二进制格式的
  2. close(): 关闭连接

2.3 属性 

  1. readyState:WebSocket通过readyState(只读)来传达连接状态,它会随着连接状态的改变而改变,由四个值来表示:

WebSocket.CONNECTING = 0 :连接正在进行

WebSocket.OPEN = 1 :连接已经建立

WebSocket.CLOSING = 2 :连接正在进行关闭握手

WebSocket.CLOSED = 3 :连接已经关闭

     2.bufferedAmount:用于检查已经进入队列但还未传输的数据大小

3.Protocol:Protocol让服务到知道客户端使用WebSocket的协议,两者使用的协议不同的话,整个属性都是空的。

3.WebSocket优点

1.减少请求费时费资源:是真正的全双工方式,建立连接后,服务器与客户端时完全对等的,可以相互请求,减少了不必要的网络请求时间损耗和网络流量;

2.更持久:websocket协议通过第一个request建立TCP连接后,只要不主动关闭,就能一直保持连接状态交换数据;

3.服务端可以主动向客户端发送消息;

4.WebSocket的使用场景

        websocket的使用场景: 社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等 需要高实时的场景。

【WebSocket】协议详解相关推荐

  1. WebSocket协议详解及应用

    标签:websocket WebSocket协议详解及应用(七)-WebSocket协议关闭帧 本篇介绍WebSocket协议的关闭帧,包括客户端及服务器如何发送并处理关闭帧.关闭帧错误码及错误处理方 ...

  2. websocket协议详解

    1 背景 WebSocket protocol 是HTML5一种新的协议.它是实现了浏览器与服务器全双工通信(full-duplex). 这篇文章介绍了关于Websocket 协议的相关信息,供大家参 ...

  3. 计算机网络:WebSocket协议详解

    1. 概述 一直以来,网络在很大程度上都是围绕着HTTP的请求/响应模式而构建的.所有的HTTP通信都是由客户端控制的,这就需要用户进行互动或者定期轮询,以便从服务器加载数据.长期以来存在着各种技术让 ...

  4. websocket协议详解与抓包分析

    Websocket是一种用于H5浏览器的实时通讯协议,它实现了浏览器与服务器全双工通信(full-duplex). 可以做到数据的实时推送,适用于广泛的工作环境,例如客服系统.物联网数据传输系统. 通 ...

  5. IoT:MQTT协议详解

    IoT -- (七)MQTT协议详解 转自:https://blog.csdn.net/anxianfeng55555/article/details/80908795 MQTT是什么? MQTT(M ...

  6. 【计算机网络面试高频】-HTTP协议详解,HTTP协议常见问题

    4.HTTP协议详解有关问题 4.1 HTTP请求 一个HTTP请求报文由请求行.请求头部.空行和请求数据四个部分组成. 1.请求行 请求行中有请求方法字段.URL字段和HTTP协议版本3个字段组成. ...

  7. webSocket(与http请求区别、请求和返回示例、替代方法:ajax轮询、long poll、Flash、NodeJS实现WebSocket通信代码、原理、WebSocket构造函数详解)

    目录 简介 优点 请求示例 请求成功返回示例 替代方法 Ajax 轮询 long poll Flash NodeJS实现webSocket(ws模块) 服务端代码 客户端代码 在线网页客户端 运行结果 ...

  8. 【Java网络编程与IO流】Http协议详解以及面试有关问题

    HTTP协议详解以及面试有关题目 1 HTTP请求 一个HTTP请求报文由请求行.请求头部.空行和请求数据四个部分组成. 1.1 请求行 请求行中有请求方法字段.URL字段和HTTP协议版本3个字段组 ...

  9. Spring和WebSocket整合详解

    Spring和WebSocket整合详解 本篇编写日期较早,代码冗余较多,新博文:Spring和WebSocket整合并建立简单的Web聊天室 官方主页 Spring WebSocket 概述 Web ...

  10. Https完全协议详解

    转自Https协议详解 HTTP 的缺点 到现在为止,我们已了解到 HTTP 具有相当优秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具两面性,它也是有不足之处的.HTTP 主要有这些不足, ...

最新文章

  1. python培训机构推荐-广州有哪些不错的python培训班
  2. [蓝桥杯]回形取数-方向向量+模拟
  3. mysql8双机热备高可用配置
  4. sql server datetime取年月_快速定位数据库性能问题,RDS推出慢SQL统计分析
  5. SQL语言之关系运算与多表操作(五)
  6. FFmpeg源代码简单分析:av_write_frame()
  7. jupyter notebook python3路径_详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式...
  8. URL Scheme获取帮助文档
  9. python管道_python 多进程之管道实例(模板)
  10. python无需编译解释执行,解释型语言和编译型语言的不同以及Python怎么运行
  11. 【HDU1255】【扫描线 —— 矩形面积交】覆盖的面积
  12. 时间选择器Android-PickerView的使用
  13. 基于扩张卷积神经网络的图像超分辨率
  14. 【数据分析与挖掘】淘宝用户行为分析(带数据集和代码)
  15. 段式液晶结构你了解多少?
  16. lempel ziv matlab,1.9 Lempel-Ziv算法
  17. Outlook打不开的问题
  18. 好嗨哟!OneOS 图形组件显示自己喜欢的图片
  19. win10装sql2000卡在选择配置_win10系统安装SQL2000卡在MADC不动的解决方法
  20. 详解Linux内核IO技术栈

热门文章

  1. 前端资源(框架,库,网站)
  2. Vs之winform工具箱显示
  3. 神秘的移动电商:服务三低人群
  4. java cache定时过期,本地缓存高性能之王Caffeine
  5. 流量卡之家:中国电信联合华为实现全球首个5G超级上行网络覆盖
  6. js操作excel全攻略
  7. 【认证篇 / 本地】(7.0) ❀ 02. 无线 Guest 用户免输密码 ❀ FortiGate 防火墙
  8. 使用pip安装pymqsql,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
  9. 当百度大脑AI虚拟主持人成央视五四晚会焦点,接班中国的不只有青年,还有AI
  10. MySQL中的sum函数遇到null的坑点