WebSocket - 理论篇

简介: WebSocket - 理论篇

什么是WebSocket:是一种H5协议规范

解决客户端与服务端实时通信而产生的技术:WebSocket本质是一种基于TCP协议,先通过Http/Https发一个特殊的Http请求进行握手,握手后会创建一个用于交换数据的TCP链接,之后客户端和服务端使用该TCP链接进行实时通信。当WebSocket的客户端和服务端握手后 建立通信后,就不再需要之前的http请求参与。

WebSocket优点:

节省通信开销:之前WebServer实现通信,都使用轮询(每隔特定时间间隔浏览器自动发送Http请求,去获取服务端的响应)该情况下,需要不停的向服务器发送请求,而HttpRequest的handler很长,请求包含真正的数据可能很小,会占用很多额外的带宽和服务器资源。

服务器可主动传送数据给客户端:

在给定时间,服务器和客户端在任意时刻相互推送信息,浏览器(客户端)和服务器只需要做一个握手的动作。建立连接后,服务器可主动传数据给客户端,客户端也可以随意向服务端传数据。交换数据时所携带的头信息很小。

实时通信:

WebSocket不仅限于Ajax方式通信。ajax方式需要浏览器发起请求。而WebSocket技术 服务端和客户端可以彼此相互推送信息,从而实现实时通信。

WebSocket建立连接过程:

1、客户端发起握手请求。

2、服务端响应请求。

3、建立链接。

详细流程:

浏览器首先向服务器发送一个特殊的Http请求(携带一些附加头信息)Upgrade:websocket,服务端解析附加头信息,产生应答消息,然后响应给客户端。之后客户端就与服务端建立响应的链接。

WebSocket生命周期:

1、打开事件:端点上建立新链接时,该事件是先于其他任何事件发生之前。该事件发生会产生三部分信息。

1.1、创建WebSocket Session对象:用于表示已经建立好的链接

1.2、配置对象:包含配置端点的信息

1.3、一组路径参数,打开节点握手时,socket端入栈匹配的URI

2、消息事件:主要是接收WebSocket对话中,另一端发送的消息。链接上的消息将会有三种形式抵达客户端。

2.1、文本消息 用String处理

2.2、二进制消息 用byteBuffer或者byte[]处理

2.3、pong消息 用java中pong.message接口的实例来处理

3、错误事件:WebSocket链接或者端点发生错误时产生。可以处理入栈消息时发生的各种异常。入栈消息可能产生的三种异常。

3.1、WebSocket建立链接时发生错误:SessionException

3.2、WebSocket试图将入栈消息解码成开发人员使用的对象时 EncodeException

3.3、WebSocket端点的其他方法运行时产生的错误

4、关闭事件:WebSocket链接端点关闭,做一些清理工作,可以由参与的任意一个端点发出。

WebSocket如何关闭链接:

1、服务端关闭底层TCP链接

2、客户端发起TCP Close

底层的TCP 正常情况下应该首先由服务器关闭 在异常情况下客户端可以发起TCP Close。

流程:当服务器被指示关闭WebSocket链接时,服务端会发起一个TCP Close操作客户端等待服务器的TCP Close。

目录
相关文章
|
存储 XML JSON
consul 简易上手指南
consul 是一个用来做服务发现的框架,具有分布式、高可用以及可横向扩展的特性
|
3月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
227 0
|
6月前
|
JavaScript 前端开发 API
Vue 2 与 Vue 3 的区别:深度对比与迁移指南
Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,在过去的几年里,Vue 2 一直是前端开发中的重要工具。而 Vue 3 作为其升级版本,带来了许多显著的改进和新特性。在本文中,我们将深入比较 Vue 2 和 Vue 3 的主要区别,帮助开发者更好地理解这两个版本之间的变化,并提供迁移建议。 1. Vue 3 的新特性概述 Vue 3 引入了许多新特性,使得开发体验更加流畅、灵活。以下是 Vue 3 的一些关键改进: 1.1 Composition API Composition API 是 Vue 3 的核心新特性之一。它改变了 Vue 组件的代码结构,使得逻辑组
1695 0
|
JavaScript 前端开发
vue-day03 v-on事件处理,表单输入绑定
文章介绍了Vue.js中事件处理和表单输入绑定的使用。包括v-on指令监听事件、事件处理方法、内联处理器、访问原生DOM事件、事件修饰符、按键修饰符、系统修饰符、exact修饰符和鼠标按钮修饰符。同时,讲解了如何使用v-model实现单行文本、多行文本、复选框和单选按钮的双向数据绑定,并提供了修饰符的使用示例。这些特性使得Vue.js在处理表单输入和事件时更加灵活和方便。
vue-day03 v-on事件处理,表单输入绑定
|
监控 JavaScript 前端开发
事件
事件
136 1
|
存储 API 数据格式
读取HDF或者NetCDF格式的栅格数据
HDF是对HDF数据模型,数据格式以及HDF库API等一系列技术的总称. HDF的最新版本是HDF5. HDF数据模型基于组(groups)和数据集(datasets)概念:如果把HDF数据比作磁盘,那么组相当于文件夹,数据集相当于文件。组和数据集都有用户自定义的属性(attributes). MODIS影像,以及我国的风云卫星数据都适用HDF格式进行存储.
275 0
|
自然语言处理 JavaScript 前端开发
拯救浏览器兼容性:Babel是前端开发的必备神器(一)
拯救浏览器兼容性:Babel是前端开发的必备神器
|
存储 安全 前端开发
终于搞懂啦!ts泛型是这样使用的呀
使用泛型可以编写通用的函数或类,以适应多种类型的数据。例如,Array 类型提供了通用的泛型数组容器,可以用于存储不同类型的元素。
407 1
|
前端开发 JavaScript 持续交付
前端代码审查规范
前端代码审查规范
256 0