完成效果图:

项目准备提要:

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完成数据的实时推送相关推荐

  1. websocket实现GPS数据的实时推送与地图的展示(优化)

    概述 前两天,发布了一片文章websocket实现GPS数据的实时推送与地图的展示,文章发出后引来了不少读者的关注,也有不少读者要求做进步一优化.本文应大家的要求,对上文的内容做一个优化,优化地方包括 ...

  2. 物联网设备数据流转之数据如何实时推送至前端:WebSocket前端接收

    背景 在实现 WebSocket 前端接收前,我们先说明白一件事,为什么要使用WebSocket? 这要从 HTTP 协议说起,我们知道 HTTP 协议只能由客户端发起,而且是短链接,这就会导致我们在 ...

  3. 物联网设备数据流转之数据如何实时推送至前端:WebSocket服务端推送

    背景 还记得,我们在物联网设备数据流转之实时数据从哪里来.如何转发:Node.js, MQTT, EMQX的WebHook这篇文章中,当 EMQX 的 WebHook 收到来自设备的消息时,我们当时只 ...

  4. python 实时数据推送_python scrapy 爬取金十数据并自动推送到微信

    一.背景 因业务需要获取风险经济事件并采取应对措施,但因为种种原因又疏忽于每天去查看财经日历,于是通过爬取金十数据网站并自动推送到微信查看. 二.目标实现 image 三.环境与工具 1.pychar ...

  5. php消息实时推送技术,基于HTTP协议之WEB消息实时推送技术原理及实现

    很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...

  6. 消息推送服务器推pc,PC浏览器消息实时推送的解决方案 ——EPush推送平台

    原标题:PC浏览器消息实时推送的解决方案 --EPush推送平台 陈华 研发工程师,2014入职去哪儿网.参与研发的EPush推送平台,增强了订单推送的时效性,提高了酒店自助订单处理率.最近负责CEQ ...

  7. spring boot 集成 websocket 实现消息主动推送

    前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单向的,在很多场景就不适合,比如实时的推送,消息通知或者股票等信息 ...

  8. SpringBoot 集成 WebSocket 实现消息群发推送

    一. 什么是 WebSocket WebSocket 是一种全新的协议.它将 TCP 的 Socket(套接字)应用在了web page上,从而使通信双方建立起一个保持在活动状态的连接通道,并且属于全 ...

  9. SpringBoot 集成 webSocket,实现后台向客户端推送消息

    图文等内容参考链接 SpringBoot2.0集成WebSocket,实现后台向前端推送信息_Moshow郑锴的博客-CSDN博客_springboot websocket WebSocket 简介 ...

最新文章

  1. 5 门可能衰落的编程语言
  2. python range函数与numpy arange函数,xrange与range的区别
  3. 返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...
  4. Freemarker宏和函数的用法和区别
  5. 计算机的发展史及多道技术
  6. c语言 原码反码和补码
  7. linux shell解析1
  8. JAVA正则提取字符串中的日期
  9. 苏州FreeNAS+ESXi5数据恢复案例
  10. 植树问题python_《程序员的数学》思考题(一)
  11. 双缝干涉实验,在双缝之后加一个反射,会怎样
  12. 【人脸识别】基于matlab PCA+LDA人脸识别【含Matlab源码 680期】
  13. C# ChartControl
  14. 领域(学科)知识图谱构建心得
  15. 同济线性代数教材(第五版)-第1章 行列式
  16. 主析取范式和主合取范式的c++求解程序
  17. android-GooglePlay上架
  18. 对JavaWeb项目中WEB-INF目录的理解
  19. 魔兽延迟最低的服务器,魔兽世界延迟高解决方法
  20. 零基础想要快速的学好3D游戏建模,兼职接单私活,来看业内人士的分析

热门文章

  1. Winfrom打印表单
  2. Active Directory 灾难恢复
  3. 判断一个字符串的字符是不是唯一
  4. iofactory.php,CI框架下引入类库资源PHPPowerPoint报出“ Cannot redeclare class IOFactory”...
  5. 数据大屏可视化展示系统有什么作用
  6. php网站本地调试工具,php本地调试工具-php/asp网站程序本地调试工具下载 v5.1--pc6下载站...
  7. 美赛整理之Matlab读取全球海洋温度数据并显示干货
  8. apache java cache-control,Tomcat: Cache-Control
  9. python openpyxl合并单元格_用openpyxl分析xlsx文件的合并单元格
  10. 太极计算机 审计厅,湖北省审计厅举办2010年春节联欢会