当前位置: 首页 > news >正文

消息推送与 WebSocket 学习

目录

消息推送常见方式

WebSocket

客户端(浏览器)API

服务端 API

定义Endpoint

Endpoint生命周期

服务端接收和推送


消息推送常见方式

  • 轮询。
  • 浏览器以指定时间间隔向服务器发送http请求,服务器再将结果返回给浏览器。
  • 延迟+服务器压力。

  • 长轮询。
  • 浏览器发出ajax请求,服务器接收到请求不会立马返回,而是阻塞请求直到有数据或者超时才返回。

  • SSE。(server-sent event)(服务器发送事件)
  • 在服务器和浏览器之间开一个单向通道。(服务器到浏览器)
  • 服务器响应的不再是一次性的数据包,而是数据流信息。当服务器有数据变更时将数据流式传输到客户端。

  • websocket。
  • 基于tcp连接,进行“全双工”通信协议(允许同时的双向传输数据)。
  • 而对于“半双工”,虽然允许数据在两个方向上传输,但是同一个时间段内只允许一个方向上传输。
  • 从http协议切换到websocket协议,再去进行双向的数据传输

WebSocket

客户端(浏览器)API

  • websocket对象创建。
  • URL格式:协议://ip地址:端口/访问路径。
let ws = new WebSocket(URL)

  • websocket对象相关事件。
事件事件处理程序描述
openws.onopen连接建立时触发
messagews.onmessage客户端接收到服务器发送的数据时触发
closews.onclose连接关闭时触发
errorws.onerror连接过程中发生错误时触发

  • websocket对象提供的方法。

方法名描述
send()通过websocket对象调用该方法发送数据给服务端

<script>let ws = new WebSocket("ws://xxx/xxx")ws.onopen = function (){//连接成功时触发};ws.onmessage = function (event){//使用event.data获取服务器发送的数据};ws.onclose = function (){//连接断开时触发};ws.onerror = function (error){//连接错误时触发};
</script>

服务端 API

  • tomcat7之后的版本后开始陆续支持websocket,也实现了 java websocket 规范。
  • java websocket 应用说由一系列的Endpoint组成。Endpoint是一个java对象,代表java websocket 链接的一端,对于服务端,可以视为处理具体 websocket 消息的接口。也就是专门处理服务器与客户端建立一对一链接通信。

  • 定义Endpoint
  1. 编程式:继承javax.websocket.Endpoint并实现其方法。
  2. 注解式:定义一个POJO,并添加@ServerEndpoint等相关生命周期注解。

  • Endpoint生命周期
  • Endpoint实例在websocket握手时创建,并在客户端与服务器链接过程中有效,最后在链接关闭时结束。
  • Endpoint接口中声明和定义了相关生命周期方法,规范实现者确保生命周期的各个阶段调用实例的相关方法,方法如下:
方法描述注解(常用)
onOpen()当开启一个新会话时调用,该方法是客户端与服务端握手成功后调用的方法@OnOpen
onClose()当会话关闭时调用@OnClose
onError()当连接过程异常时调用@OnError

  • 服务端接收和推送
  1. 接收。编程式(MessageHandler消息处理器)。注解式(定义Endpoint时,通过@OnMessage注解指定接收信息的方法)。
  2. 推送(发送)。RemoteEndPoint完成,其实例由Session维护。
  3. 发送消息的两种方式:session.getBasicRemote(获取同步消息发送的实例,然后调用其sendXXX()方法发送消息)、session.getAsyncRemote(获取异步消息发送的实例,然后调用其sendXXX()方法发送消息)。这里的同步与异步:是否阻塞当前线程是否等待结果
  4. 发送文本信息:sendText()。

@ServerEndpoint("/chat")
@Component
public class ChatEndpoint {//websocket Session//连接创建时被调用@OnOpenpublic void onOpen(Session session, EndpointConfig config) {}//接收到客户端发送的数据时被调用@OnMessagepublic void onMessage(String message, Session session) {}//连接关闭时被调用@OnClosepublic void onClose(Session session) {}//发生错误时被调用@OnErrorpublic void onError(Session session, Throwable error) {}

  • 具体的实现(springboot整合websocket)下篇博客发。
  • 有简单的前端可视化哦。。。

http://www.dtcms.com/a/355979.html

相关文章:

  • Node.js终极文本转图指南
  • 基于SpringBoot的学科竞赛管理系统
  • 请详细介绍RuntimeInit.java中的MethodAndArgsCaller类
  • 架构设计——云原生与分布式系统架构
  • nginx的启动 、 停止、重载命令
  • node,nvm,vscode下载安装教程(windows版本)
  • AI“炼”金术:从数据到智能的蜕变
  • Shell 脚本编程完全指南
  • HFSS许可证与版本兼容性
  • 智慧清洁革命:有鹿机器人如何重塑三大行业未来
  • AbpvNext问题记录——post接口,接收前端发送的空串转换数字异常问题。
  • Orgin绘制热力图
  • 财务报表包括哪些?一文讲清财务三大表
  • DMN6140L-13 电子元器件 Diodes美台N沟道增强型功率MOSFET
  • Codeforces Round 1043 (Div. 3) E. Arithmetics Competition
  • docker搭建Apisix和Apisix Dashboard
  • 智能仪表板DevExpress Dashboard v25.1新版亮点:增强数据管理功能
  • rk键盘 用蓝牙链接 教程
  • 实战演练(一):从零构建一个功能完备的Todo List应用
  • C++(Qt)软件调试---vcpkg安装crashpad(34)
  • 金融Agent+LLM的特性分析与调研
  • C#并行计算(SIMD)应用
  • illustrator-02
  • 洛谷 P2568 GCD-提高+/省选−
  • 「Java EE开发指南」如何使用MyEclipse启用自动JSP验证?
  • C语言————函数递归(通俗易懂)
  • logcat 网络日志解析
  • 二、开关电源的EMC改善措施
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-图像处理与数据预处理
  • Maven 编译打包一个比较有趣的问题