【WebSocket】websocket学习【一】

news2024/9/20 23:03:27

1.消息推送常见方式

  • 轮询
  • 长轮询
  • SSE
  • websocket

1.1. 轮询方式

  1. 轮询:浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实时返回数据给浏览器
  2. 长轮询:浏览器发出HTTP请求,服务器端接收到请求后,会阻塞请求直到有数据或者超时才返回
    在这里插入图片描述

1.2.SSE(server-sent event):服务器发送事件

  1. SSE在服务器和客户端之间打开一个单向通道
  2. 服务端响应的不再是一次性的数据包,而是text/event-stream类型的数据流信息
  3. 服务器有数据变更时将数据流式传输到客户端
    在这里插入图片描述

1.3.websocket介绍

WebSocket是一种在基于TCP连接上进行全双工通信的协议

全双工(Full Duplex):允许数据在两个方向上同时传输
半双工(Half Duplex):允许数据在两个方向上传输,但是同一个时间段内只允许一个方向上传输。例如:打电话
单工: 数据传输只允许在一个方向上的传输,只能一方来发送数据,另一方来接收数据并发送。例如:对讲机

问:HTTP是单工的还是双工的还是半双工的?

分版本,版本不同,工作模式不同
http1.0:单工。因为是短连接,客户端发起请求之后,服务端处理完请求并收到客户端的响应后即断开连接。
http1.1:半双工。默认开启长连接keep-alive,开启一个连接可发送多个请求。
http2.0:全双工,允许服务端主动向客户端发送数据。

原理解析

在这里插入图片描述
客户端发起http请求,请求升级为websocket协议,服务器响应并切换为websocket协议,响应状态码为101,后续都是通过websocket 进行通信

1.4.客户端【浏览器】API

  1. websocket对象创建
let  ws  =  new WebSocket(URL);

URL 说明
格式:协议://ip地址/访问路径
协议:协议名称为 ws

  1. websocket对象相关事件
事件事件处理程序描述
openws.onopen连接建立时触发
messagews.onmessage客户端接收到服务器发送的数据时触发
closews.close连接关闭时触发
  1. websocket对象提供的方法
方法名称描述
send()通过websocket对象调用该方法发送数据给服务端

例子如下:

<script>
let ws new WebSocket("ws://localhost/chat");
ws.onopen function(){
};
ws.onmessage function(evt){
//通过evt.data可以获取服务器发送的数据
};
ws.onclose function(){
};
</script>

1.5.服务端 API

Tomcat7.0.5 版本开始支持WebSocket,并且实现了Java WebSocket规范。

Java WebSocket应用由一系列的Endpoint组成。Endpoint 是一个java对象,代表WebSocket链接的一端,对于服务端,我们可以视为处理具体WebSocket消息的接口。

我们可以通过两种方式定义Endpoint:
第一种是编程式, 即继承类 javax.websocket.Endpoint并实现其方法。
第二种是注解式, 即定义一个POJO, 并添加 @ServerEndpoint相关注解。(一般都是用第二种)

Endpoint实例在WebSocket握手时创建,并在客户端与服务端链接过程中有效,最后在链接关闭时结束。在Endpoint接口中明确定义了与其生命周期相关的方法, 规范实现者确保生命周期的各个阶段调用实例的相关方法。生命周期方法如下:

方法描述注解
onOpen()当开启一个新的会话时调用,该方法是客户端与服务端握手成功后调用的方法@OnOpen
onClose()当会话关闭时调用@OnClose
onError()当连接过程异常时调用@OnError

服务端如何接收客户端发送的数据呢?

  1. 编程式
    通过添加 MessageHandler 消息处理器来接收消息
  2. 注解式
    在定义Endpoint时,通过@OnMessage注解指定接收消息的方法

服务端如何推送数据给客户端呢?
发送消息则由 RemoteEndpoint 完成, 其实例由 Session 维护。
发送消息有2种方式发送消息

  1. 通过session.getBasicRemote 获取同步消息发送的实例 , 然后调用其 sendXxx()方法发送消息
  2. 通过session.getAsyncRemote 获取异步消息发送的实例,然后调用其 sendXxx() 方法发送消息

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[003].第4节:RabbitMQ环境搭建

我的后端学习大纲 RabbitMQ学习大纲 1.rpm包方式搭建&#xff1a; 1.1.搭建RabbitMQ单体架构&#xff1a; 1.MQ下载地址2.这里是提前下载好后上传安装包到服务器得opt目录下&#xff1a; 3.安装MQ需要先有Erlang语言环境&#xff0c;安装文件的Linux命令(分别按照以下顺序安装…

RabbitMQ发布订阅模式Publish/Subscribe详解

订阅模式Publish/Subscribe 基于API的方式1.使用AmqpAdmin定制消息发送组件2.消息发送者发送消息3.消息消费者接收消息 基于配置类的方式基于注解的方式总结 SpringBoot整合RabbitMQ中间件实现消息服务&#xff0c;主要围绕3个部分的工作进行展开&#xff1a;定制中间件、消息发…

网络硬盘录像机NVR程序源码NVR全套运用方案

在当今社会&#xff0c;随着科技的飞速发展和人们对安全需求的日益增长&#xff0c;安防监控系统已成为保障公共安全、维护社会稳定的重要手段。其中&#xff0c;网络视频录像机&#xff08;NVR&#xff09;作为安防监控系统的核心设备&#xff0c;其智能化升级运用方案对于提高…

OpenLayers3, 加载鹰眼控件

文章目录 一、前言二、代码实现三、总结 一、前言 鹰眼图即地图显示范围的缩略图&#xff0c;可显示当前地图窗口在整幅地图中的位置。通过拖动鹰眼图对话框中的矩形框可改变当前地图的显示区域范围&#xff0c;是地图浏览中常用的功能之一。 本案例使用OpenLayers3框架&…

数字虚拟人原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

振兴杯全国青年职业技能大赛信息通信网络线务员解决方案

一、引言 随着数字化时代的到来&#xff0c;信息技术的飞速发展正深刻改变着人们的生活与工作方式。智能楼宇作为这一时代的产物&#xff0c;以其提升生活和工作效率、改善居住和办公环境的特点&#xff0c;受到了广泛关注。智能安防作为智能楼宇的重要组成部分&#xff0c;其…

解决flutter运行项目后报错 java.util.zip.ZipException: zip END header not found

全新项目运行后直接报错 java.util.zip.ZipException: zip END header not found网上找了其他案例试了没有效果 根据官网说法&#xff0c;针对不同机型处理 我的是windows&#xff0c;然后按照图片说明的目录删除了文件夹之后重新运行项目了 注意.gradle文件夹是隐藏的&…

分析 Runtime.getRuntime() 执行阻塞原因

1、起因 线上系统通过 git 命令执行的方式获取远程仓库分支&#xff0c;一直运行正常的接口&#xff0c;突然出现超时&#xff0c;接口无法响应&#xff0c;分析验证发现只有个别仓库获取分支会出现这种情况&#xff0c;其他都还是可以正常获取到分支结果信息。 2、分析异常原…

音频分割怎么弄?手把手教会你实用的音频分割技巧

在巴黎的浪漫街头&#xff0c;打卡地标的方式已经达到了next level&#xff01;而今&#xff0c;想让这份记忆更加生动&#xff0c;不再只有照片与视频&#xff0c;更有音频的加入~ 想象一下&#xff0c;倘若用音频分割免费版工具来为这份旅行日志添上独一无二的音符&#xff…

Coze开发工作流

工作流可以理解是工作流程&#xff0c;就像流程审批的节点&#xff0c;它允许用户处理逻辑复杂且有较高稳定性要求的任务流。通过使用扣子提供的大量灵活可组合的节点&#xff0c;比如大语言模型 LLM、自定义代码、判断逻辑等&#xff0c;用户可以快速搭建工作流&#xff0c;无…

儿童乘坐火车高铁,忘带户口本了该怎么办?儿童临时身份证怎么办理?12306可申请儿童临时身份证明

儿童乘火车&#xff0c;没有携带户口本怎么办&#xff1f; 儿童乘坐火车/高铁时&#xff0c;家长需要携带儿童的有效身份证件才能乘车&#xff0c;如果到车站后发现忘记带户口本了&#xff0c;无法乘车怎么办&#xff1f;此时不要慌张&#xff0c;铁路部门已经为我们解决了这个…

界面控件DevExpress WinForms中文教程:Data Grid(数据网格)简介(二)

DevExpress WinForms Data Grid是一个高性能的UI组件&#xff0c;由DirectX渲染引擎提供支持。数据网格(GridControl)提供了一个灵活的基于视图的体系结构&#xff0c;包括许多数据塑造和UI自定义特性&#xff0c;数据网格可以显示和编辑来自任何大小和复杂数据源的数据。 P.S&…

详细扒一扒css的背景渐变(通俗易懂)

前言&#xff1a; CSS 渐变使您可以显示两种或多种指定颜色之间的平滑过渡。 CSS 定义了两种渐变类型&#xff1a; 线性渐变&#xff08;向下/向上/向左/向右/对角线&#xff09;径向渐变&#xff08;由其中心定义&#xff09; 下面来详细看看吧~ &#x1f308;&#x1f308;文…

【2.10】回溯算法-解黄金矿工问题

一、题目 你要开发一座金矿&#xff0c;地质勘测学家已经探明了这座金矿中的资源分布&#xff0c;并用大小为 m * n 的网格grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量&#xff1b;如果该单元格是空的&#xff0c;那么就是 0。 为了使收益最大化&#x…

代码随想录 刷题记录-12 回溯(1) 基本理论

什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 回溯法的效率 虽然回溯法很难&#xff0c;很不好理解&#xff0c;但是回溯法并不是什么高效的算法。 因为回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#xff…

【图文并茂】ant design pro 如何对接后端个人信息接口

上一节我们有讲到如何对接登录接口的 【图文并茂】ant design pro 如何对接登录接口 仅仅能登录是最基本的&#xff0c;但是我们要进入后台还是需要另一个接口。 这个接口有两个作用&#xff1a; 来获取当前登录账号的信息&#xff0c;比如头像&#xff0c;用户名&#xff0…

SAP Lock Object锁机制

一、锁机制 SAP LUW要求数据库对象的锁定在SAP LUW结束释放&#xff0c;并且该数据库锁要求对所有SAP程序可见。SAP提供了一个逻辑数据锁定机制&#xff0c;该机制基于系统特定的锁定服务应用服务器中的中心锁定表&#xff08;即将加锁的信息记入数据库表&#xff09;。一个AB…

文档翻译软件哪个好用?后悔没早发现这5款

在学术研究的道路上&#xff0c;英文文献翻译无疑是一项挑战重重的任务&#xff01; 作为一名经常与英文文献打交道的学者&#xff0c;我一直在寻找能够简化这一过程的工具。最近&#xff0c;我发现了一些英文文献翻译在线免费工具&#xff0c;它们提供了文档翻译的功能&#…

IC rankIC

IC IC衡量的是预测值和实际值之间的相关系数 计算公式为&#xff1a;IC Pearson(R(predicted),R(actual)) 取值范围&#xff1a;[-1, 1]&#xff0c;其中1表示完全相关&#xff0c;也就是预测值和实际值完全一样。0表示完全不相关&#xff0c;-1表示&#xff0c;反向相关 ra…

Catf1ag CTF Web(八)

前言 Catf1agCTF 是一个面向所有CTF&#xff08;Capture The Flag&#xff09;爱好者的综合训练平台&#xff0c;尤其适合新手学习和提升技能 。该平台由catf1ag团队打造&#xff0c;拥有超过200个原创题目&#xff0c;题目设计注重知识点的掌握&#xff0c;旨在帮助新手掌握C…