springboot整合websocket

 websocket和传统http协议

http

概念

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是基于TCP/IP协议来传输数据的,是Web浏览器和Web服务器之间进行数据交换的标准协议。

HTTP协议的主要特点包括:

  1. 简单易用:HTTP协议使用简单,易于开发和调试。

  2. 无状态:HTTP协议是一种无状态协议,即服务器不会记住之前客户端的请求信息,每个请求都是独立的。

  3. 可扩展:HTTP协议支持各种不同的请求方式和响应类型,同时也可以通过HTTP头部来传递自定义数据。

  4. 明文传输:HTTP协议传输的数据是明文的,因此可能会存在安全问题。

  5. 支持缓存:HTTP协议支持缓存机制,可以通过缓存来提高性能。

  6. 支持虚拟主机:HTTP协议支持虚拟主机,可以将多个域名映射到同一个IP地址上。

总之,HTTP协议在互联网通信方面发挥了重要作用,是Web应用开发不可缺少的基础。

 原理图

 websocket

概念

WebSocket是一种网络协议,它使浏览器和服务器之间建立持久性的连接,可实现双向通信。与HTTP协议不同,WebSocket建立一条TCP连接后,之后的数据传输都在这一条连接上进行,不需要重新建立连接。WebSocket协议还支持发送二进制数据、文本数据和ping-pong消息以实现心跳保活等。 WebSocket通常用于实时性要求较高的应用,如在线游戏、股票行情、即时消息等。

 原理图

 

websocket和传统http比较

HTTP和WebSocket是客户端与服务器之间的通信协议,二者有以下优缺点对比:

优点:

HTTP:

  1. 可靠性高:HTTP是基于TCP协议的,可以保证数据传输的可靠性。

  2. 兼容性好:HTTP协议的版本升级不会影响旧版本的使用,向下兼容性好。

  3. 安全性好:HTTP协议可以与SSL/TLS协议相结合,保证数据传输的安全性。

WebSocket:

  1. 实时性好:WebSocket与HTTP相比,具有实时性更强的优势。

  2. 效率高:WebSocket可以减少HTTP协议中的握手开销和头部信息,提高数据传输效率。

  3. 跨域支持好:WebSocket可以跨域支持数据传输,实现跨域数据传输更加方便。

缺点:

HTTP:

  1. 传输速度慢:HTTP的传输速度相对较慢,由于每个请求都需要建立和释放连接。

  2. 实时性差:HTTP无法满足实时性要求高的场景,特别是在推送数据时,效率较低。

WebSocket:

  1. 兼容性差:WebSocket协议在IE浏览器中的兼容性较差。

  2. 安全性差:由于WebSocket不是基于HTTP协议的,因此安全性存在一定的问题。

  3. 状态维护难度大:WebSocket需要服务器端维护客户端的状态,增加了服务器端的负担。

总的来说,HTTP协议更适合静态数据的传输和请求,WebSocket协议更适合实时性和大量数据传输的场景。选择协议要根据场景需求来决定。

springboot整合websocket实战

环境搭建

pom文件

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置类

@Configuration
public class WebSocketConfig {/*** 	注入ServerEndpointExporter,* 	这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint*/@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}@Beanpublic ServletServerContainerFactoryBean createWebSocketContainer() {ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();container.setMaxTextMessageBufferSize(8192 * 40);container.setMaxBinaryMessageBufferSize(8192 * 40);return container;}}

业务编写

@Component
@Slf4j
@ServerEndpoint("/websocket/")
public class RealTimeDataWebsocket {/*** 链接成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam(value = "userId") String userId) {// todo 初始化逻辑(进行一些记录等)}/*** 收到客户端消息后调用的方法* 收到的消息结果** @param message* @param*/@OnMessagepublic void onMessage(String message, Session session, @PathParam(value = "userId") String userId) {// todo 业务逻辑,第一个参数位置支持byte[]}/*** 发送错误时的处理** @param session* @param error*/@OnErrorpublic void onError(Session session, Throwable error) {// todo 错误逻辑}/*** 链接关闭调用的方法*/@OnClosepublic void onClose(@PathParam(value = "userId") String userId) {// todo 关闭逻辑}// 想客户端发送消息public void sendOneMessage(String userId, String message) {}
}

测试

测试websocketicon-default.png?t=N7T8https://blog.csdn.net/weixin_44808225/article/details/134272651?spm=1001.2014.3001.5501

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA小游戏“飞翔的小鸟”

第一步是创建项目 项目名自拟 第二步创建个包名 来规范class 再创建一个包 来存储照片 如下&#xff1a; 代码如下&#xff1a; package game; import java.awt.*; import javax.swing.*; import javax.imageio.ImageIO; public class Bird { Image image; in…

YOLOv8改进实战 | 更换主干网络Backbone(六)之轻量化模型VanillaNet进阶篇

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

Linux(11):Linux 账号管理与 ACL 权限设定

Linux 的账号与群组 每个登入的使用者至少都会取得两个 ID&#xff0c;一个是使用者 ID(User ID &#xff0c;简称UID)、一个是群组ID (Group ID &#xff0c;简称GID)。 Linux系统上面的用户如果需要登入主机以取得 shell 的环境来工作时&#xff0c;他需要如何进行呢? 首先…

每日一题(LeetCode)----链表--链表中的下一个更大节点

每日一题(LeetCode)----链表–链表中的下一个更大节点 1.题目&#xff08;1019. 链表中的下一个更大节点&#xff09; 给定一个长度为 n 的链表 head 对于列表中的每个节点&#xff0c;查找下一个 更大节点 的值。也就是说&#xff0c;对于每个节点&#xff0c;找到它旁边的第…

Umi-OCR图片批量识别文字工具

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/粘贴/批量导入图片&#xff0c;段落排版/排除水印&#xff0c;扫描/生成二维码。内置多国语言库。 项目地址&#xff1a;https://github.com/hiroi-sora/Umi-OCR

F. Magic Will Save the World

首先积攒了能量打了怪再积攒是没有意义的&#xff0c;可以直接积攒好&#xff0c;然后一次性进行攻击 那么怎么进行攻击了&#xff1f;可以尽量的多选怪物使用水魔法攻击剩余的再用火魔法进行攻击&#xff0c; 也就是只要存在合法的体积&#xff08;即装入背包的怪物的体积之…

封装一些可能会用到的JS的Dom操作方法(非JS自带的方法)

1. 父元素节点下的子元素节点逆序 HTMLElement.prototype.childRevers function () {var all_num this.childElementCount;if (all_num) {while(all_num--){this.appendChild(this.children[all_num]);}} } // 获取 ul 父节点对象 var oul document.getElementsByTagName(u…

Python web自动化测试 —— 文件上传

​文件上传三种方式&#xff1a; &#xff08;一&#xff09;查看元素标签&#xff0c;如果是input&#xff0c;则可以参照文本框输入的形式进行文件上传 方法&#xff1a;和用户输入是一样的&#xff0c;使用send_keys 步骤&#xff1a;1、找到定位元素&#xff0c;2&#…

在很多nlp数据集上超越tinybert 的新架构nlp神经网络模型

在很多nlp数据集上超越tinybert 的新架构nlp神经网络模型 网络结构图测试代码网络结构图 测试代码 import paddle import numpy as np import pandas as pd from tqdm import tqdmclass FeedFroward(paddle.nn.Layer):

图面试专题

一、概念 和二叉树的区别&#xff1a;图可能有环 常见概念 顶点&#xff08;Vertex&#xff09;&#xff1a; 图中的节点或点。边&#xff08;Edge&#xff09;&#xff1a; 顶点之间的连接线&#xff0c;描述节点之间的关系。有向图&#xff08;Directed Graph&#xff09;&…

基于BP神经网络的手写体数字识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 filename dir(images\*.bmp); %图像文件格式 load BP.matfilename dir(test\*.bmp); …

[BJDCTF2020]The mystery of ip1

提示 ssti模板注入head头x-forwarded-for 每一次做题的最开始流程都大致因该是 信息收集找可以操控的地方 查看hint页面的源代码又发现它提示说 ####你知道为什么会知道你的ip吗 查看flag页面 从刚才给我的提示以及他这里显示的我的ip&#xff0c;大概找到了我可操作的可控点 …

【Java SE】带你在String类世界中遨游!!!

&#x1f339;&#x1f339;&#x1f339;我的主页&#x1f339;&#x1f339;&#x1f339; &#x1f339;&#x1f339;&#x1f339;【Java SE 专栏】&#x1f339;&#x1f339;&#x1f339; &#x1f339;&#x1f339;&#x1f339;上一篇文章&#xff1a;带你走近Java的…

ubuntu22.04系统下载程序和依赖,并拷贝到指定路径下

脚本1 apt install aptitude apt-get -d install xxx #xxx是待下载的安装包 mv /var/cache/apt/archives/* /home/tuners/1apt install aptitude apt-get -d install xxx mv /var/cache/apt/archives/*.deb /home/tuners/1 xxx 为程序包名称 /home/tuners/1为保存程序包的…

PM2 在线和离线部署uvicorn和fastapi项目过程

PM2介绍 PM2 is a daemon process manager that will help you manage and keep your application online 24/7 PM2是一个后台进程管理工具&#xff0c;能帮助管理应用和维持应用7*24小时运行。 PM2在线安装 npm install pm2 -gPM2离线安装(适用于内网) 参见 如何离线安装pm2…

git-4

1.在GitHub上创建个人仓库 现在仓库中有LICENSE文件&#xff0c;但本地没有这个文件&#xff0c;该怎么办呢&#xff1f;往下看 2.把本地仓库同步到GitHub 3.不同人修改了不同文件如何处理&#xff1f; 两个人在同一个分支上&#xff0c;两个人修改了不同文件 其中一人&…

案例研究|北京交通大学基于DataEase开展多场景校园数据分析与展示

北京交通大学是教育部直属&#xff0c;教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学&#xff0c;是国家“211工程”“985工程优势学科创新平台”“双一流”建设高校。 多年来&#xff0c;北京交通大学积极发挥信息技术赋能学校人才培养、…

基于springboot实现乒乓球预约管理系统项目【项目源码】

基于springboot实现乒乓球预约管理系统演示 系统的开发环境 浏览器&#xff1a;IE 8.1&#xff08;推荐6.0以上&#xff09; 开发使用语言&#xff1a;JAVA JDK版本&#xff1a;JDK_8 数据库管理系统软件&#xff1a;Mysql 运行平台&#xff1a;Windows 7 运行环境&#…

【hacker送书第6期】深入理解Java核心技术

第6期图书推荐 内容简介作者简介精彩书评参与方式 内容简介 《深入理解Java核心技术&#xff1a;写给Java工程师的干货笔记&#xff08;基础篇&#xff09;》是《Java工程师成神之路》系列的第一本&#xff0c;主要聚焦于Java开发者必备的Java核心基础知识。全书共23章&#xf…

关于鸿蒙网络请求的问题

https://developer.huawei.com/consumer/cn/forum/topic/0204136145853212268?fid0102683795438680754 鸿蒙OS 代码 import http from ohos.net.http;export const httpUtils (url: string, data: any) > {return new Promise((resolve, reject) > {let httpRequest …