SpringBoot项目整合WebSocket几种方式

      最后更新:2022-04-15 00:09

      文章目录

      • I. 网套基本原理
        • 1. 网页软件基础
          • 1.1 基本概念
          • Http握手1.2 握手。
          • 1.3 SockJS
          • 1. 爪哇州条例
          • 1.5 Websocket 应用程序场景
        • 2、STOMP协议
          • 2.1 概念介绍
          • 与STOMP有关的第二命令。
      • 二、网络软件实施
        • 1. 在WebSocket土著网站上发表
        • 春春的网盘
          • 2.1 **pom.xml**
          • 2.2 WsSessionManager
          • 2.3 HttpAuthHandler
          • ** 窃听器** 窃听器**
          • 二.5 原则HandshakeHandler 配置(没有配置)
          • ** WebSocketConfig** 是一个配置类。
        • 3、STOMP
          • 3.1 介绍
          • 3.2 pom.xml
          • ** WebSocketConfig 配置等级** 3.3
          • SpringMVC 控制器 3.4
          • 3.5 前端的订阅
      • 三、常见问题
        • 1. 届会分担问题

      I. 网套基本原理

      com/wstoo.com/wstoo.com/wstoo.com/wstoo.com/wstoo.com/wstoo.com/wstoo.wstoo.com/wstoo.wstoo.com/wstoo.wstoo.wcom/wstoo.wstoo.com/wstoo.wstoo.com/wstoo.wstoo.com/wstoo.wstoo.com/wstoo.wstoo.com/wstoo.com/wstoo/wstoo.com/wstoo.com/ww

      1. 网页软件基础

      1.1 基本概念

      所以,与其去研究基本知识, 不如看看大的, 宣传大家伙的网站, 和好的,好的,好的,反应。

      • Websocket在使用WebC/S作为共同通信协议时,需要浏览器和网络服务集装箱的支持。
      • Websocket 取决于 Http 来进行握手, 而 Websocket 协议在握手完成之前是不完整的 。
      • 资源描述符的前缀为ws,加密通道传输则为wss,例如ws://example.com:80/some/path
      • Websocket 不定义传输材料的格式, 但是它会处理文本和二进制 。

      Http握手1.2 握手。

      以下是HTTP用于握手而不是专用于专有协议的主要原因:

      • Websocket 大多用作 HTTP 的补充。 与 Http 密切关联是有道理的, 更适合 Http 环境 。
      • 对不支持Websocket的客户提供极好的兼容性,可通过HTTP和Websocket模拟获得兼容性反馈。

      1.3 SockJS

      SockJS 这是JavaScript的图书馆大部分用于解决浏览器缺乏 Websocket 功能的问题。它提供横跨浏览器的统一 JavaScript API。它试图首先利用本地的Websocket。可以使用各种浏览器特定传输协议来模仿 Websocket 行为,以防失败。

      1. 爪哇州条例

      Java为 Websocket 提供了一个标准的 API 界面 。 JSR-356 ,作为Java EE7规格的一部分。在大多数共同的爪哇网络容器中已经添加了网络套件功能。这一标准接口也得到支持。由Flickr用户Twitter. com47+、Jetty 9.1+、GlassFish 4.1+、WebLogic 12.

      1.5 Websocket 应用程序场景

      这里主要参考 春季文件 虽然Websocket可能会让网页更具活力、更具参与性,但是,在许多情况下,Ajax如果与HTTP流或远程查询相结合,可能会提供简单而有效的解决办法。例如,新闻、邮件、社会订阅等等需要动态更新。但是,在这些情况下,每几分钟更新一次没有错。而另一方面,协作、游戏和财务应用程序都需要近实时改变。注意到时间本身不是一个决定因素,如果信息量相对较少(例如监测网络问题),则信息量不足。HTTP流转或四舍五入也是一个可行的选择。在低潜伏、高频和高信息量相结合的情况下,最好的解决办法是使用网套。

      2、STOMP协议

      2.1 概念介绍

      STOMP 这是一个直截了当的互操作性协议。其目的是在信息传输方面成为最受欢迎的青少年群体。已经设计了一个基于文本的简单不对称短信协议。它最初是为Ruby、Python和Perl等文字语言设计的。无法关闭临时文件夹:%s。多年来,经常利用STOMP。并获得大量客户(如Gozirra、Sthomp)。 stomp.py 一个新闻机构(例如积极MQ、RabitMQ等)的援助工具箱、Strompngo等。协议的最新版本是1.2

      STOMP是一个基于“Frame”的协议。一个国家是这个国家, 一个国家是这个国家, 一个国家是这个国家, 一个国家是这个国家, 一个国家是这个国家, 一个国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家, 国家是这个国家。每个框架由一个指挥(指挥官)、一组头目(负责人)和一个任择机构(Body)组成。以下是STOMP框架基本结构的一个例子:

      如你所见,STOMP的结构 相当简单和直截了当。

      与STOMP有关的第二命令。

      STOMP还提供客户和服务概念。客户的定义是收集接收和发送信息的目的地;客户是用户代理。现有行动有三种:发送信息(SEND)、发送订阅(SUBSCBBE)和发送信息(SUBSCRIBE)。为此,以下是STOMP的命令。

      客户端命令:

      • 目的:客户为启动数据流或TCP连接而发出的第一项指示。
      • SEND:向目的地发送信息,其中必须包括姓名。destination的头部
      • 亚物质:用于登记收听目的地,必须包括姓名。destination的头部
      • 新服务必须提供名称 。transaction的头部
      • 提交服务时必须提供姓名。transaction的头部
      • ABORT: 反弹时必须提供姓名 。transaction的头部
      • 通知客户连接即将终止。

      服务端命令:

      • 服务器响应客户部分CONECT的要求,表示连接成功。
      • 向客户发送订阅信息,请向客户发送订阅信息。destination,并且必须有一个名字message-id此信息的唯一表示是头部。
      • RECIPT: 显示客户要求退回收据的收据由服务器成功处理,其中必须包括头部。message-id一份收据,其中说明收到哪些信息。
      • 错误:如果发生错误,服务器可以发送命令,在大多数情况下,在发送错误后关闭连接。

      可以说,STOMP主要为发送信息和签名提供语义语言,但也能够促进业务的进行。

      二、网络软件实施

      网络正式介绍Websocket: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#websocket

      1. 在WebSocket土著网站上发表

      原文Websocket 导言: https://blog.com/I'm sorry, csdn.

      pom.xml

      配置 WebSocketConfig 类, 在 Springboot 扫描相关笔记之前启用此类 。

      处理类类WsServerServerendpoint 消息

      这些是Jdk笔记,不是Spring笔记。在 Websocket 下,需要注意的是接收参数中的信息,如果我们想向客户发送信息,我们以后需要保存和使用这些信息。session.getBasicRemote().sendText(XXX)

      @ServerEndpoint

      • 您可以通过 Spring Boot 查看您所接触的 Ws 应用程序的路径 。类似我们使用@requestMapping 的方式 。例如,你的启动港是8080。这张纸条的货币价值是WS那我们就可以通过 ws://127.0.0.1:8080/ws 连接您的应用程序 。

      @OnOpen

      • 当 Websocket 成功建立连接时, 它称为修饰器方法 。

      @OnClose

      • 当 Websocket 连接丢失时, 此修饰方法被称为 。

      @OnMessage

      • 当客户向服务发送信息时,此注解更新会被触发, 包括字符串元素, 显示客户已传递到的值 。

      @OnError

      • 当 Websocket 连接激活此修饰器方法时, 异常会发生 。

      春春的网盘

      春天还提供网络套装信封, 使我们能够建立自己的拦截器, 在握握手前处理请求, 并避免恶意联系。

      2.1pom.xml

      2.2 WsSessionManager

      使用 ConcurentHashMap 创建会话集合以保存先前登录的 WebSocket 会话 。

      2.3 HttpAuthHandler

      HttpAuthHandler处理与Ws相关的新闻。通过扩展文本WebSocketHandler类并执行所需的功能,Websocket 事件可以处理 。它可以连接到原始笔记的笔记

      • 在连接初始备注@on Open后成功连接后, 触发了连接后 Estbrished 。
      • 连接关闭后, 挂坠连接关闭时会呼叫关闭, 而当挂坠连接关闭时, 原始便笺中的@ OnClear 方法会被呼叫 。
      • 使用与原始便笺相同的@OnMessage 函数的客户端发送消息,即可激活处理文本消息 。

      二. 拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者拦截者

      我的窃听器截获了Ws的要求这是第一次通过实施“握手窃听器接口”来定义握手拦截器。值得指出的是,这和在Handler发生的事不一样。当握手形成时 就是这样它被破碎成两部分:握手和握手。Handler事件基于成功的握手套接头连接。因此,在这一阶段认证将是以最具成本效益的方式使用服务器资源。其中有两种主要办法:在Handshake之前和Handshake之后。握手是被其中一人的名字所吸引的一个在握手后触发。

      二.5 原则HandshakeHandler 配置(没有配置)

      用户可以使用 Websocket 重写 MyPrinical 。MyPrincipalHandshakeHandler是DefaultHandshakeHandler我们就在这里改写吧determineUser创建我们自己的 Plancipal 的方式, 我们使用登录标记, 而不是默认值, 用于登录用户 。

      我的校长建立了自己的Plancipal。

      创建一个名为 My MajentHandshakeHandler 的班级。

      配置 WebSocketConfig 类 。

      通过获取 WebSocket Conficter 类并超越相关函数来构造 Web 套件 。我们主要讨论WebSocketHandlers的注册机制。通过修改 WebSocketHandler Registry 选项来配置它 。我们的 WS 处理器处理类使用添加的Handler 函数添加 。第二个参数是您暴露 ws 的路径 。包括我们制造的拦截器这是Setallowed Origans的外部验证 。

      最后访问链接ws://localhost:8085/parentServer?token=shawn

      3、STOMP

      3.1 介绍

      停止是一个WebSocket子协议。SpringBoot也为集成立木提供了正式的例子。这是我现在采用的方法 融合。这种方法更为实用。可以使用消息代理,信件可与 SpringMvc 相似处理 。然而,发送信息已演变成订阅方法。这很容易实现。

      3.2 pom.xml

      WebSocketConfig 配置第3类

      SpringMVC 控制器 3.4

      WS 控制器是 ws 控制器, @ Substanding Mapping 便条可在客户订阅相关地址( 路径参数) 后立即返回信件, 这些参数必须放在参数之前 。@DestinationVariable订阅有三种类型。/topic/hello,定义一组人可以收到的群体信息/topic/state/{classId},一对一消息/user/{name}/hello,我这里的ResultWrapper.success它是一种封装类,它与在SpringMVC封装的返回的物体相匹配,用解析json文字将对象返回前端。

      @MessageMapping 用于接收来自客户端的信息并将其发送到特定地点。 客户端提供的地址应该被记录。 如果前一设置指定了前缀, 则必须使用前缀将信件发送到客户端前: 例如 :/app/hello然而,所有服务器都需要写作。@MessageMapping("/hello")。

      @SendTo 是一个用于向客户端发送信件的信件发送注释。 这里的参数是订阅者地址的全部名称 。/topic/hello不能省略/topic返回信息必须只返回项目。

      除了以说明形式发送信息外,还有以模板形式以灵活方式传递信息的方式。simpMessagingTemplate.convertAndSendToUser(一对一)和simpMessagingTemplate.convertAndSend应当指出,我填写参数的方式更鼓励向任何地方的客户发送信息,但似乎在这个地点有一个坑,可以停止,但可以启动一条线来发送信息。

      3.5 前端的订阅

      一部分代码举例

      三、常见问题

      1. 届会分担问题

      上文经常强调的问题之一是:无法关闭临时文件夹:%s。所有人都知道,这届会议 并不穿越jvm。如果有多台服务器,如需http://ww.un.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com/photo.com.com/photo.com.com/photo.com com/photo.com com/photo.com/photo.com.com/photo.com/photo.com com/photo.com/photo.com/把会话放在缓存中心 我们可能会有同样的问题几个春季会话设置会解决这个问题。但是,网插座不能。他的届会没有排定。当然,它不是故意让你看起来不好。这是因为网站网站与网页卡片申请之间的区别。

      因特网上目前最直截了当的方法是使用redis订阅广播。初级法典与第二法典相似。要在本地存储请求, 您必须在地图上显示消息 。这意味着每个服务器将节省他与本地连接的会话。然后必须改变消息的目的地。又不是直接送到收货人手里此外,还采用了再版订阅方法。当服务器即将发送信件时,您通过 redis 发送了此消息 。这一信息将发送给所有订户。然后本地尝试发送。归根结底,只有与此用户会话相关的频道才允许发送。

      参考文章

      [网 四个方法 来获得一个春根网套

      使用 SPOP 的实时 WebSock 连接

      SpringWeb 软件库简短介绍

      WebSocket SpringBoot 项目整合

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类