springboot websocket

大家好,我是烤鸭:

     今天想分享一下springboot+websocket。

     之前接到一个需求,需要在页面监听后台的数据(输入邮箱后,需要用户打开邮箱,页面监听用户是否点击激活邮件)。之前的实现方式,是每隔几秒发送ajax请求,根据返回值处理。

     后来想试着用websocket实现一下,思路是差不多的。但是方式要简单很多。

环境
     springboot  2.1.0.RELEASE

1 项目搭建

     简单的springboot项目,需要引入的

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

2 实现思路

    当打开页面的时候即和后台建立连接并发送一条消息(唯一key)。这时候用页面的唯一key,每隔一秒缓存(redis)中查询,该key是否存在,存在的话,就说明用户点击了邮件,返回给前台。

 /*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, Session session) {System.out.println("来自客户端的消息:" + message);//群发消息for (WebSocketMonitor item : webSocketSet) {//找到对应的session发消息if(item.session.getId().equals(session.getId())){try {Timer timer = new Timer();//每隔一秒查询redis中数据timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(list);//模拟获取已点击用户if(redisClient.exists(message)){try {sendMessage("i==============="+message);} catch (IOException e) {e.printStackTrace();}finally {WebSocketMonitor.list.remove(message);timer.cancel();}}},0,10000);item.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}try {item.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}}

  3 效果图

     

4 异常

WebSocket connection to 'ws://localhost:8161/static/webSocketMonitor' failed: Error during WebSocket handshake: Unexpected response code: 404

这种情况是因为springboot的内置容器需要注入ServerEndpointExporter,如果是独立的servlet容器就不需要了。

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

 

WebSocket connection to 'ws://192.168.0.2/static/webSocketMonitor' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET

看到有的文章说websoket不支持localhost,改成本机ip后出现这个问题,改成localhost就可以了

 

5 总结

     还是先需求吧,很多都可以实现这种需求,找到最适合的方式。websocket更适合做聊天室这种,毕竟websocket是维持长连接的。可以监听多人连接,将连接广播给连接的各个用户。这些功能在这个需求中有些用不上,所以不是特别适合用。

 

源码下载:

里边加了list模拟本地触发的情况,redis模拟缓存的情况,用了两个页面用于模拟不同的key,上述的需求是一个页面。

https://download.csdn.net/download/angry_mills/10782754

 

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

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

相关文章

[网络开发]同步与线程安全方案

方案&#xff1a;synchronized,volatileCAS&#xff08;compareAndSet&#xff09;,atomic包&#xff0c;Lock接口 java同步和IO同步的对比&#xff1a; 都是同步异步的方案问题&#xff0c;一个操作的是java代码(实际是堆和方法区)&#xff0c;一个操作的是TCP RecvBuffer而已…

[css] 说下你对background-size的理解,它有什么运用场景?

[css] 说下你对background-size的理解&#xff0c;它有什么运用场景&#xff1f; 设置背景图的大小&#xff0c;一般用来设置背景图的大小。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 …

idea的plugins无法使用marketplace plugins are not loaded

idea64.exe.vmoptions删除-Djsse.enableSNIExtensionfalse 再次重启后就可以正常使用plugins&#xff01;&#xff01;&#xff01;

redis实践的一点思路,关于支付回调

大家好&#xff0c;我是烤鸭: 如果作为第三方支付平台&#xff0c;需要通知调用方付款成功。但是出现通知失败的情况&#xff0c;怎么处理。 支付宝的异步通知&#xff0c;每个订单的异步通知实行分频率发送:15s 3m 10m 30m 30m 1h 2h 6h 15h。 如果没有收到success&a…

断电启动+智能插座 七彩虹B460主板实现电脑远程开机

BIOS设置操作步骤&#xff1a; 1&#xff0c;开机按F2进入BIOS系统&#xff08;小提示&#xff1a;不同的主板按键不一样&#xff0c;开机应该有提示&#xff09; 2&#xff0c;高级模式 > 高级 > 电源管理设置 > 交流电源恢复后处理 > 选择“开机” 3&#xff0c…

[css] 如何自定义radio按钮的样式

[css] 如何自定义radio按钮的样式 选择器 input[type“radio”]现在几乎不用原生的radio&#xff0c;一是原生样式改成设计稿的样子太浪费时间&#xff0c;二是不同浏览器对于原生radio的展示还不一样。基于状态驱动的思想&#xff0c;用自定义按钮或其他元素来替代radio&…

myabtis 数字+逗号 传参问题 $和#

大家好&#xff0c;我是烤鸭&#xff1a; 遇到一个maybatis传参的问题。 如果传参是数字逗号的形式&#xff0c;比如1,2,3,4,5。 问题复现&#xff1a; 项目中查询sql和navicat查询sql结果不一致。 1 项目中&#xff1a; 如图所示&#xff0c;查到一条数据。 可以看到…

SpringBoot上传文件到本服务器 目录与jar包同级

前言 看标题好像很简单的样子&#xff0c;但是针对使用jar包发布SpringBoot项目就不一样了。 当你使用tomcat发布项目的时候&#xff0c;上传文件存放会变得非常简单&#xff0c;因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候&#xff0c;…

JS判断是否是科学计算结果并处理

var re 505899.24- 495991.61- 9907.63;var test1 /\d(?:.(\d*))?e([-]\d)/.test(re);alert("是否是科学计算结果:"test1);var test2 re.toFixed(10)-0;alert("处理后的结果&#xff1a;" test2 );

[css] css怎样使每个字符宽度一样?

[css] css怎样使每个字符宽度一样&#xff1f; 控制字符间距&#xff1a;letter-spacing:1em;[em,px,rem]个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

大家好&#xff0c;我是烤鸭&#xff1a; 又是采坑实录。 异常如下&#xff1a; org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipeat org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)at org.ap…

[css] word-wrap、word-break和white-space有什么区别?

[css] word-wrap、word-break和white-space有什么区别&#xff1f; word-wrap标明是否允许浏览器再单词内进行断句normal 只允许在断字点换行 默认值break-word 在长单词或这url地址内部进行换行word-break标明怎么样进行单词内的断句normal 默认值break-all 允许在单词内换行k…

Redis免费客户端 Another Redis DeskTop Manager 下载地址及安装教程

下载及安装教程地址&#xff1a;GitHub - qishibo/AnotherRedisDesktopManager: &#x1f680;&#x1f680;&#x1f680;A faster, better and more stable redis desktop manager [GUI client], compatible with Linux, Windows, Mac. Whats more, it wont crash when loadi…

[css] 说说你对字母“X“在CSS中有什么作用?

[css] 说说你对字母"X"在CSS中有什么作用&#xff1f; 可以用作关闭按钮叉叉X的底部与文本对齐的基线位置相同个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

JavaScript文字转图片

非常感谢这位博主提供的代码&#xff0c;以下只做代码记录 博文转载地址&#xff1a;https://blog.csdn.net/qq_30100043/article/details/76549377//绘制文字到canvas&#xff0c;判断换行位置&#xff0c;和设置canvas高度 function canvasWrapText(options) {var settings …

mysql 内置功能 函数 date_format函数

创建数据库db12 create database db12 charsetutf8; use db12; 准备表和记录 CREATE TABLE blog (id INT PRIMARY KEY auto_increment,NAME CHAR (32),sub_time datetime ); 插入记录 INSERT INTO blog (NAME, sub_time) VALUES(第1篇,2015-03-01 11:31:21),(第2篇,2015-03-11 …

低版本webview无法请求jquery ajax

大家好&#xff0c;我是烤鸭&#xff1a; 又来踩坑了。 1. 场景复现 有反馈我们的H5页面&#xff0c;无法正确显示页面。就类似下图这样&#xff0c;ajax没法请求到数据。 之前测试的时候是在web端做的测试&#xff0c;用安卓7.0和8.0的手机都试了一下&#xff0c;是没…

[css] CSS3中的transition是否可以过渡opacity和display?

[css] CSS3中的transition是否可以过渡opacity和display&#xff1f; transition过渡display是有一个前提条件: 浏览器渲染是在每一帧的最后&#xff0c;每一帧都会执行以下操作:js执行2.style加持3.layout4.paint5.composite在js执行过程中&#xff0c; 遇到DOM操作&#xff…

Ubuntu 无法应用原保存的显示器配置

Ubuntu开机之后页面出现&#xff1a;无法应用原保存的显示器配置所选模式均不匹配可能的模式&#xff1a;为 CRTC 63 尝试模式CRTC 63&#xff1a;尝试 800x60060Hz 模式输出在 1366x76860Hz (通过 0)CRTC 63&#xff1a;尝试 2560x160060Hz 模式输出在 1366x76860Hz (通过 0)C…

由excel导出引起的cpu 100% 和gc 的问题

大家好&#xff0c;我是烤鸭&#xff1a; 记一次 由excel导出 导致的cpu飙升200%&#xff0c;jvm 内存不足。 1. 场景复现 前端页面导出Excel&#xff0c;之前导出4,5W条数据都没什么问题的。 今天业务突然反馈说导出不了了&#xff0c;我试着导出了2w数据&#xff0…