SpringBoot中Websocket的简单使用

目录

1 Websocket的定义及一些使用场景

2 使用方法

2.1 导入依赖坐标

2.2 创建WebSocket服务

2.3 编写配置类注册WebSocket

2.4 在需要处使用WebSocket服务


 

1 Websocket的定义及一些使用场景

定义:Websocket实现了浏览器与服务器全双工通信一浏览器和服务器只需要完成WebSocket 是基于 TCP 的一种新的网络协议。一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。(来自黑马程序员)

使用场景:商家端用户催单的提醒、商家端用户下订单的提醒……

2 使用方法

2.1 导入依赖坐标

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

2.2 创建WebSocket服务

模板,可以直接使用,如下:

@Slf4j
@Component //交给Spring容器管理
@ServerEndpoint("/ws/{sid}") //访问路径
public class WebSocketServer {//存放会话对象private static Map<String, Session> sessionMap = new HashMap();/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam("sid") String sid) {log.info("客户端:{}建立连接", sid);sessionMap.put(sid, session);}/*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, @PathParam("sid") String sid) {log.info("收到来自客户端:{}的信息:{}", sid, message);}/*** 连接关闭调用的方法** @param sid*/@OnClosepublic void onClose(@PathParam("sid") String sid) {log.info("连接断开:{}", sid);sessionMap.remove(sid);}/*** 群发,主要功能代码** @param message*/public void func(String message) {Collection<Session> sessions = sessionMap.values();for (Session session : sessions) {try {//服务器向客户端发送消息session.getBasicRemote().sendText(message);} catch (Exception e) {e.printStackTrace();}}}}

2.3 编写配置类注册WebSocket

也是模板代码,没啥好说的,如下:

@Configuration
public class WebSocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}

2.4 在需要处使用WebSocket服务

比如我们可以在用户完成支付之后,通过Websocket给商家端发送来单提醒。

@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate WebSocketServer webSocketServer;public void paySuccess(String outTradeNo) {//其它代码...//websocket向客户端发送消息Map map = new HashMap<>();//添加的内容String jsonString = JSON.toJSONString(map);webSocketServer.sendToAllClient(jsonString);}}

 

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

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

相关文章

WebSocket服务多节点部署问题及解决方案

多节点部署问题 伪广播问题&#xff1a;在多节点部署时&#xff0c;每个节点只能向与其直接连接的客户端广播消息&#xff0c;导致其他节点的客户端无法接收到消息。 解决方案 使用消息中间件&#xff1a;引入如Redis PUBSUB或Kafka等消息中间件&#xff0c;作为所有节点共享…

C语言:苹果和虫子

题目描述 你买了一箱n个苹果&#xff0c;很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果&#xff0c;假设虫子在吃完一个苹果之前不会吃另一个&#xff0c;那么经过y小时你还有多少个完整的苹果&#xff1f; 输入输出格式 输入格式 输入仅一行&#xff0c…

北京硒鼓耗材回收价位,硒鼓回收价格,回收

联系我的时候请说是在百猫网看到的&#xff01; 硒鼓回收价格&#xff1a;最专业的硒鼓回收 顺达耗材回收 俗话说&#xff0c;顾客是最好的&#xff0c;良好的品牌效应是推动发展的关键之一。 北京顺达耗材回收有限公司为中小企业创造良好的二手消费市场&#xff0c;不断贯彻…

皓学IT:MySQL02

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

Go语言开发小技巧易错点100例(十三)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

微服务流量控制组件Sentinel

启动Sentinel控制台 从github下载jar包执行java -Dserver.port9005 -jar sentinel-dashboard-1.8.7.jar 启动控制台登录控制台,账号密码默认 sentinel sentinel.dashboard.auth.username -----指定用户名启动sentinel.dashboard.auth.password -----指定密码启动 微服务引入依赖…

Uncertainty-Aware Mean Teacher(UA-MT)

Uncertainty-Aware Mean Teacher 0 FQA:1 UA-MT1.1 Introduction:1.2 semi-supervised segmentation1.3 Uncertainty-Aware Mean Teacher Framework 参考&#xff1a; 0 FQA: Q1: 不确定感知是什么意思&#xff1f;不确定信息是啥&#xff1f;Q2&#xff1a;这篇文章的精妙的点…

Java面试——锁

​ 公平锁&#xff1a; 是指多个线程按照申请锁的顺序来获取锁&#xff0c;有点先来后到的意思。在并发环境中&#xff0c;每个线程在获取锁时会先查看此锁维护的队列&#xff0c;如果为空&#xff0c;或者当前线程是等待队列的第一个&#xff0c;就占有锁&#xff0c;否则就会…

停止一个正在运行的线程的正确姿势

1、使用退出标志&#xff0c;使线程正常退出&#xff0c;也就是当run方法完成后线程终止。 2、使用stop方法强行终止&#xff0c;但是不推荐这个方法&#xff0c;因为stop和suspend及resume一样都是过期作 废的方法。 3、使用interrupt方法中断线程。 class MyThread extend…

线性代数的几何意义简单总结

矩阵的意义 矩阵既可以理解为一组&#xff08;列&#xff09;基向量&#xff0c;也可以理解为线性变换。 某个向量左乘矩阵表示向量在用新的基向量表示对应在原始坐标系下的坐标&#xff0c;也可以视为经过线性变换后的坐标。 原始基向量都是单位矩阵&#xff0c;其他矩阵都…

284.【华为OD机试真题】二叉树的广度优先遍历(二叉树的构建和层次遍历—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-二叉树的广度优先遍历二.解题思路三.题解代码P…

idea 2018.3永久简单激活。激活码

1.打开hosts文件将 0.0.0.0 account.jetbrains.com 添加到文件末尾 C:\Windows\System32\drivers\etc\hosts 2.注册码&#xff1a; MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoiR1VPIEJJTiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaW…

AutoSAR(基础入门篇)11.2-存储处理与Block

目录 一、NVRAM Block NVRAM Block的类型 二、Fee Block 三、Ea Block 四、总结 同通信的PDU一样,存储功能也需要一些特殊的数据结构来存放和管理我们的NV数据(NV data) 一、NVRAM Block NVRAM Block的作用类似于IPDU,但它们两仅仅只是作用上相似,其功能实现是完全…

数据结构知识点总结-线性表(1)-线性表的定义、基本操作、顺序表表示

线性表 定义 线性表是具有相同数据类型的N&#xff08;N>0&#xff09;个元素的有限序列&#xff0c;其中N为表长&#xff0c;当N0时线性表是一张空表。 线性表的逻辑特征&#xff1a;每个非空的线性表都有一个表头元素和表尾元素&#xff0c;中间的每个元素有且仅有一个直…

有趣的CSS - 弹跳的圆

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用css写一个好玩的不停弹跳变形的圆。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页…

Leetcode题解20.有效的括号

题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型…

亿道丨三防平板电脑厂家丨三防平板PDA丨三防工业平板:数字时代

在当今数字化时代&#xff0c;我们身边的世界变得越来越依赖于智能设备和无线连接。其中&#xff0c;三防平板PDA&#xff08;Personal Digital Assistant&#xff09;作为一种功能强大且耐用的数字工具&#xff0c;正在引领我们进入数字世界的全新征程。 三防平板PDA结合了平板…

RabbitMQ消息堆积

消息堆积是指在消息队列中&#xff0c;因为生产消息的速度超过消费消息的速度&#xff0c;导致大量消息在队列中积压的现象。在RabbitMQ中&#xff0c;处理消息堆积的策略通常包括以下几个方面&#xff1a; 增加消费者数量&#xff08;水平扩展&#xff09;&#xff1a;通过增加…

【Elasticsearch专栏 07】深入探索:Elasticsearch的倒排索引如何进行模糊查询和通配符查询

文章目录 Elasticsearch的倒排索引如何进行模糊查询和通配符查询01 模糊查询&#xff08;Fuzzy Query&#xff09;02 通配符查询&#xff08;Wildcard Query&#xff09;03 查询性能优化04 总结 Elasticsearch的倒排索引如何进行模糊查询和通配符查询 Elasticsearch的倒排索引…

LeetCode 0235.二叉搜索树的最近公共祖先:用搜索树性质(不遍历全部节点)

【LetMeFly】235.二叉搜索树的最近公共祖先&#xff1a;用搜索树性质&#xff08;不遍历全部节点&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公…