thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送
完成效果图:
项目准备提要:
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.5
org.springframework.boot
spring-boot-devtools
true
org.apache.commons
commons-lang3
com.google.guava
guava
28.0-jre
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-websocket
WebSocket配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketExporter {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
package com.lazyknow.websocket;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.annotation.PostConstruct;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.lazyknow.entity.user.User;
import com.lazyknow.service.user.UserService;
import com.lazyknow.vo.UserVo;
@ServerEndpoint(value = "/socket/{cmd}/{id}")
@Component
public class WebSocketHandler {
public static Logger logger = LoggerFactory.getLogger(WebSocketHandler.class);
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
private static CopyOnWriteArraySetwebSocketSet = new CopyOnWriteArraySet();
private String uid = "";
private Session session;
// 用于查询用户信息
@Autowired
private UserService userService;
private static UserService userServiceMapper;
@PostConstruct
public void init(){
WebSocketHandler.userServiceMapper = this.userService;
}
/**
* 开启WebSocket请求
*/
@OnOpen
public void onOpen(Session session, @PathParam("cmd") String cmd,@PathParam("id") String id) throws Exception {
this.session = session;
webSocketSet.add(this);
uid = id;
// 可以根据不同类型在选择执行的SQL
if("user".equals(cmd)) {
Listskirt = Lists.newArrayList();
Listnums = Lists.newArrayList();
// 查询前10页数据
for (int i = 0; i < 10; i++) {
PageInfouser = userServiceMapper.findUserInfo(i, 20);
Listlist = user.getList();
for (User info : list) {
skirt.add(info.getId()+"");
nums.add(info.getAge());
UserVo vo = new UserVo();
vo.setSkirt(skirt);
vo.setNumber(nums);
Thread.sleep(300);
this.sendMessage(JSON.toJSONString(vo));
}
}
}else {
this.onClose();
}
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
logger.info("参数信息:{},uid:{}",message,uid);
//群发消息
for (WebSocketHandler item : webSocketSet) {
try {
item.sendMessage(JSON.toJSONString(message));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@OnClose
public void onClose(){
webSocketSet.remove(this);
if (session != null){
try {
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 自定义消息推送、可群发、单发
* */
public static void sendInfo(String message,@PathParam("id") String id) throws IOException {
logger.info("推送消息到前端:{},推送信息:{}",id,message);
for (WebSocketHandler item : webSocketSet) {
try {
//这里可以设定只推送给这个id的,为null则全部推送
if(id==null) {
item.sendMessage(message);
}else if(item.uid.equals(id)){
item.sendMessage(message);
}
} catch (IOException e) {
continue;
}
}
}
@OnError
public void onError(Session session, Throwable error) {
logger.error("连接异常!");
error.printStackTrace();
}
// 发送信息
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
}
前端页面
页面展示
还有一些Springboot和thymeleaf的常规配置,这里就不全部写下了。
thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送相关推荐
- websocket实现GPS数据的实时推送与地图的展示(优化)
概述 前两天,发布了一片文章websocket实现GPS数据的实时推送与地图的展示,文章发出后引来了不少读者的关注,也有不少读者要求做进步一优化.本文应大家的要求,对上文的内容做一个优化,优化地方包括 ...
- 物联网设备数据流转之数据如何实时推送至前端:WebSocket前端接收
背景 在实现 WebSocket 前端接收前,我们先说明白一件事,为什么要使用WebSocket? 这要从 HTTP 协议说起,我们知道 HTTP 协议只能由客户端发起,而且是短链接,这就会导致我们在 ...
- 物联网设备数据流转之数据如何实时推送至前端:WebSocket服务端推送
背景 还记得,我们在物联网设备数据流转之实时数据从哪里来.如何转发:Node.js, MQTT, EMQX的WebHook这篇文章中,当 EMQX 的 WebHook 收到来自设备的消息时,我们当时只 ...
- python 实时数据推送_python scrapy 爬取金十数据并自动推送到微信
一.背景 因业务需要获取风险经济事件并采取应对措施,但因为种种原因又疏忽于每天去查看财经日历,于是通过爬取金十数据网站并自动推送到微信查看. 二.目标实现 image 三.环境与工具 1.pychar ...
- php消息实时推送技术,基于HTTP协议之WEB消息实时推送技术原理及实现
很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...
- 消息推送服务器推pc,PC浏览器消息实时推送的解决方案 ——EPush推送平台
原标题:PC浏览器消息实时推送的解决方案 --EPush推送平台 陈华 研发工程师,2014入职去哪儿网.参与研发的EPush推送平台,增强了订单推送的时效性,提高了酒店自助订单处理率.最近负责CEQ ...
- spring boot 集成 websocket 实现消息主动推送
前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单向的,在很多场景就不适合,比如实时的推送,消息通知或者股票等信息 ...
- SpringBoot 集成 WebSocket 实现消息群发推送
一. 什么是 WebSocket WebSocket 是一种全新的协议.它将 TCP 的 Socket(套接字)应用在了web page上,从而使通信双方建立起一个保持在活动状态的连接通道,并且属于全 ...
- SpringBoot 集成 webSocket,实现后台向客户端推送消息
图文等内容参考链接 SpringBoot2.0集成WebSocket,实现后台向前端推送信息_Moshow郑锴的博客-CSDN博客_springboot websocket WebSocket 简介 ...
最新文章
- 5 门可能衰落的编程语言
- python range函数与numpy arange函数,xrange与range的区别
- 返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...
- Freemarker宏和函数的用法和区别
- 计算机的发展史及多道技术
- c语言 原码反码和补码
- linux shell解析1
- JAVA正则提取字符串中的日期
- 苏州FreeNAS+ESXi5数据恢复案例
- 植树问题python_《程序员的数学》思考题(一)
- 双缝干涉实验,在双缝之后加一个反射,会怎样
- 【人脸识别】基于matlab PCA+LDA人脸识别【含Matlab源码 680期】
- C# ChartControl
- 领域(学科)知识图谱构建心得
- 同济线性代数教材(第五版)-第1章 行列式
- 主析取范式和主合取范式的c++求解程序
- android-GooglePlay上架
- 对JavaWeb项目中WEB-INF目录的理解
- 魔兽延迟最低的服务器,魔兽世界延迟高解决方法
- 零基础想要快速的学好3D游戏建模,兼职接单私活,来看业内人士的分析
热门文章
- Winfrom打印表单
- Active Directory 灾难恢复
- 判断一个字符串的字符是不是唯一
- iofactory.php,CI框架下引入类库资源PHPPowerPoint报出“ Cannot redeclare class IOFactory”...
- 数据大屏可视化展示系统有什么作用
- php网站本地调试工具,php本地调试工具-php/asp网站程序本地调试工具下载 v5.1--pc6下载站...
- 美赛整理之Matlab读取全球海洋温度数据并显示干货
- apache java cache-control,Tomcat: Cache-Control
- python openpyxl合并单元格_用openpyxl分析xlsx文件的合并单元格
- 太极计算机 审计厅,湖北省审计厅举办2010年春节联欢会