Springboot整合Websocket如何实现后端向前端主动推送消息
发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,本篇文章为大家展示了Springboot整合Websocket如何实现后端向前端主动推送消息,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在手机上相信都有来自
千家信息网最后更新 2025年11月18日Springboot整合Websocket如何实现后端向前端主动推送消息
本篇文章为大家展示了Springboot整合Websocket如何实现后端向前端主动推送消息,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
在手机上相信都有来自服务器的推送消息,比如一些及时的新闻信息,这篇文章主要就是实现这个功能,只演示一个基本的案例。使用的是websocket技术。
一、什么是websocke
tWebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器全双工通信,学过计算机网络都知道,既然是全双工,就说明了服务器可以主动发送信息给客户端。这与我们的推送技术或者是多人在线聊天的功能不谋而合。
为什么不使用HTTP 协议呢?这是因为HTTP是单工通信,通信只能由客户端发起,客户端请求一下,服务器处理一下,这就太麻烦了。于是websocket应运而生。
下面我们就直接开始使用Springboot开始整合。以下案例都在我自己的电脑上测试成功,你可以根据自己的功能进行修改即可。
二、整合websocket
1、环境配置
Idea 2018专业版(已破解)
Maven 4.0.0
SpringBoot 2.2.2
websocket 2.1.3
jdk 1.8
下面我们新建一个普通的Springboot项目。
2、添加依赖
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-websocket 2.1.3.RELEASE
3、在application.properties文件修改端口号
一句话:server.port=8081
4、新建config包,创建WebSocketConfig类
1@Configuration 2public class WebSocketConfig { 3 @Bean 4 public ServerEndpointExporter serverEndpointExporter() { 5 return new ServerEndpointExporter(); 6 } 7}5、新建service包,创建WebSocketServer类
@ServerEndpoint("/websocket/{sid}") @Component public class WebSocketServer { static Log log= LogFactory.getLog(WebSocketServer.class); //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static int onlineCount = 0; //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet(); //与某个客户端的连接会话,需要通过它来给客户端发送数据 private Session session; //接收sid private String sid=""; /** * 连接建立成功调用的方法 */ @OnOpen public void onOpen(Session session,@PathParam("sid") String sid) { this.session = session; webSocketSet.add(this); //加入set中 addOnlineCount(); //在线数加1 log.info("有新窗口开始监听:"+sid+",当前在线人数为" + getOnlineCount()); this.sid=sid; try { sendMessage("连接成功"); } catch (IOException e) { log.error("websocket IO异常"); } } /** * 连接关闭调用的方法 */ @OnClose public void onClose() { webSocketSet.remove(this); //从set中删除 subOnlineCount(); //在线数减1 log.info("有一连接关闭!当前在线人数为" + getOnlineCount()); } /** * 收到客户端消息后调用的方法 * @param message 客户端发送过来的消息 */ @OnMessage public void onMessage(String message, Session session) { log.info("收到来自窗口"+sid+"的信息:"+message); //群发消息 for (WebSocketServer item : webSocketSet) { try { item.sendMessage(message); } catch (IOException e) { e.printStackTrace(); } } } @OnError public void onError(Session session, Throwable error) { log.error("发生错误"); error.printStackTrace(); } //实现服务器主动推送 public void sendMessage(String message) throws IOException { this.session.getBasicRemote().sendText(message); } //群发自定义消息 public static void sendInfo(String message,@PathParam("sid") String sid) throws IOException { log.info("推送消息到窗口"+sid+",推送内容:"+message); for (WebSocketServer item : webSocketSet) { try { //这里可以设定只推送给这个sid的,为null则全部推送 if(sid==null) { item.sendMessage(message); }else if(item.sid.equals(sid)){ item.sendMessage(message); } } catch (IOException e) { continue; } } } public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { WebSocketServer.onlineCount++; } public static synchronized void subOnlineCount() { WebSocketServer.onlineCount--; } 6、新建controller包,创建Mycontroller类
@Controller public class MyController { //页面请求 @GetMapping("/socket/{cid}") public ModelAndView socket(@PathVariable String cid) { ModelAndView mav=new ModelAndView("/socket"); mav.addObject("cid", cid); return mav; } //推送数据接口 @ResponseBody @RequestMapping("/socket/push/{cid}") public String pushToWeb(@PathVariable String cid,String message) { try { WebSocketServer.sendInfo(message,cid); } catch (IOException e) { e.printStackTrace(); return "推送失败"; } return "发送成功"; } }}7、新建一个websocket.html页面
现在开发服务器和网页就可以看到效果了。一般情况下Springboot2+Netty+Websocket的组合方式更加的常用一下。这个只是给出了一个基本的案例,你可以根据自己的需求进行更改。
客户
消息
推送
客户端
服务器
服务
在线
成功
事件
主动
整合
信息
功能
方法
案例
错误
通信
安全
人数
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库软件是什么样子
.net管理系统服务器框架
服务器管理架设网站
java 服务器信息
重庆智慧城管软件开发软件
第三次国土调查数据库图层
大学论文联合对比数据库官网
苏州安卓软件开发机构
农安网络技术诚信合作
甘肃诚信积分管理软件开发公司
高性能http服务器
手游服务器租赁成本
金蝶sql删除数据库
办公室网络安全宣传图
江西发展软件开发供应商
中学生网络安全家庭教育
Synology服务器管理地址
学校国家网络安全宣传周总结
佛山网络技术培训
网络安全基础知识测试题
软件开发工作体会
杭州游戏软件开发创新服务
魔兽世界四川服务器有哪些云主机
阿里软件开发部职责
数据库漏洞升级在解决什么
数据库系统实战项目
网络安全案例评述
5650服务器
数据库录入是否的数据类型
360网络安全培训课程