实时消息传送:WebSocket实现系统后台消息实时通知

实时消息传送:WebSocket实现系统后台消息实时通知

    • WebSocket简介
    • 基本实现步骤
      • 后台服务器
      • 后端接口
        • SimpMessagingTemplate
      • MessageDto
      • 前端客户端
    • 示例应用

在现代Web应用中,提供实时通知对于改善用户体验至关重要。WebSocket技术允许建立双向通信通道,从系统后台将消息实时传送给系统用户,并在前端以弹窗的形式通知用户。本文将深入探讨如何使用WebSocket来实现这一功能。

WebSocket简介

WebSocket是一种双向通信协议,与传统的HTTP通信不同,它支持持久连接,使得服务器能够主动向客户端推送消息。这使得WebSocket成为实时通信和消息传送的理想选择。

基本实现步骤

要实现系统后台消息的实时通知,我们可以遵循以下基本步骤:

后台服务器

在后台,我们需要创建一个WebSocket服务器来处理连接和消息广播。使用Java的WebSocket库,我们可以轻松建立WebSocket服务器。

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io IOException;
import java.util.concurrent.CopyOnWriteArrayList;@ServerEndpoint("/websocket")
public class WebSocketServer {private static CopyOnWriteArrayList<Session> sessions = new CopyOnWriteArrayList<>();@OnOpenpublic void onOpen(Session session) {sessions.add(session);}@OnMessagepublic void onMessage(String message, Session session) {// 处理收到的消息}@OnClosepublic void onClose(Session session) {sessions.remove(session);}public static void broadcastMessage(String message) {for (Session session : sessions) {try {session.getBasicRemote().sendText(message);} catch (IOException e) {e.printStackTrace();}}}
}

后端接口

在后端,我们需要提供一个HTTP接口,以便系统后台可以发送消息给WebSocket客户端。这个接口接受POST请求,包含消息内容和接收者信息。为了实现这一功能,我们使用了Spring Framework的WebSocket支持,并引入了SimpMessagingTemplate

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MessageController {@Autowiredprivate SimpMessagingTemplate messagingTemplate;@PostMapping("/send-message")public void sendMessageToUser(@RequestBody MessageDto message) {// 在此处,您可以执行任何逻辑以准备要发送的消息内容String messageContent = message.getContent();// 向指定用户发送消息messagingTemplate.convertAndSendToUser(message.getRecipient(), "/queue/messages", messageContent);}
}
SimpMessagingTemplate

SimpMessagingTemplate是Spring Framework的一部分,它允许在后端应用程序中将消息发送到WebSocket客户端的特定目的地(destination),以便将消息传递到订阅该目的地的WebSocket客户端。这是实现实时消息传递的关键工具,它允许后台将消息推送到WebSocket客户端,从而实现了实时通知功能。

SimpMessagingTemplate是Spring Framework中的一个类,它用于向WebSocket客户端发送消息。它是Spring的WebSocket支持模块的一部分,通常用于实现实时消息传递功能。以下是一些关于SimpMessagingTemplate的基本信息:

  • 用途SimpMessagingTemplate用于发送消息到WebSocket目的地(destination),使消息能够到达订阅该目的地的WebSocket客户端。

  • Spring WebSocket:Spring Framework提供了WebSocket支持,允许开发者构建具有实时消息传递功能的应用程序。SimpMessagingTemplate是这一支持的关键组件之一。

  • 示例用途:通常,SimpMessagingTemplate用于处理后端应用程序中的业务逻辑,然后将结果消息发送给前端的WebSocket客户端。这可以用于实现实时聊天、通知、即时数据传递等功能。

  • 目的地(destination):在Spring WebSocket中,消息发送到WebSocket客户端的特定位置被称为目的地。SimpMessagingTemplate允许您将消息发送到指定的目的地,WebSocket客户端通过订阅相应目的地来接收这些消息。

在上述示例中,SimpMessagingTemplate被用于向WebSocket客户端发送消息,实现了系统后台向用户发送实时通知的功能。它可以将消息发送到指定用户的特定目的地,以便将消息传递到具体的WebSocket订阅者。

要使用SimpMessagingTemplate,通常需要配置Spring WebSocket支持并注入该类。然后,您可以在后端的控制器或服务中使用它来发送消息给WebSocket客户端。

MessageDto

MessageDto是一个数据传输对象,包含了消息的接收者和内容。在HTTP请求的请求体中发送MessageDto对象。

public class MessageDto {private String recipient;private String content;// Getters and setters
}

前端客户端

在前端,我们需要创建WebSocket连接并处理从服务器接收到的消息。通常,我们可以将接收到的消息以弹窗的形式通知用户。

const socket = new WebSocket("ws://example.com/websocket");socket.onopen = () => {console.log("WebSocket连接已建立");
};socket.onmessage = (event) => {const message = event.data;// 使用弹窗通知用户showNotification(message);
};socket.onclose = () => {console.log("WebSocket连接已关闭");
};function showNotification(message) {// 使用浏览器的通知API或自定义弹窗组件来通知用户// 以下是一个简单的示例,使用浏览器通知APIif ("Notification" in window) {if (Notification.permission === "granted") {new Notification("新消息", { body: message });} else if (Notification.permission !== "denied") {Notification.requestPermission().then((permission) => {if (permission === "granted") {new Notification("新消息", { body: message });}});}}
}

示例应用

通过这个实例,系统后台可以使用WebSocket将重要消息实时通知给用户。用户将获得弹窗通知,无需刷新页面或等待长时间来查看消息。这种实时通知机制对于在线聊天应用、通知系统、即时交易平台等场景非常有用。

WebSocket技术为实现实时通知提供了一个强大而灵活的工具,允许系统后台与前端用户之间建立持久的双向通信通道。这种实时通信增强了用户体验,使用户能够快速响应重要信息。无论是社交媒体、电子邮件通知还是在线购物平台,WebSocket可以为您的应用程序提供实时通知功能。

通过WebSocket,您可以改进用户体验、提高用户参与度,并确保及时传达重要信息。实时消息传送是现代Web应用程序的重要组成部分,帮助您与用户建立更强的连接。

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]

在这里插入图片描述
加油!

共同努力!

Keafmd

感谢支持牛哄哄的柯南,期待你的三连+关注~~

keep accumulate for my dream【共勉】

                                                       ↓   ↓   ↓   ↓   ↓   ↓  

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

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

相关文章

Linux高性能服务器编程——ch1笔记

第1章 TCP/IP 协议族 1.1 TCP/IP 协议族体系结构以及主要协议 数据链路层 网卡接口的网络驱动程序&#xff0c;以处理数据在物理媒介&#xff08;比如以太网、令牌环等&#xff09;上的传输。 协议&#xff1a;ARP、RARP&#xff0c;实现IP地址和机器物理地址之间的转换。 网络…

IOS屏幕旋转监听

1.设计窗口,添加三个按钮 2.添加事件连接 3.按钮点击事件实现 先添加三个IBAction 实现IBAction 使用旋转立刻生效 -(IBAction)btnFixPortrait:(id)sender{//访问应用程序委托成员_app.mask UIInterfaceOrientationMaskPortrait;//设置窗口旋转属性[self setNeedsUpdateOf…

揭开 Amazon Bedrock 的神秘面纱 | 基础篇

在 2023 年 4 月&#xff0c;亚马逊云科技曾宣布将 Amazon Bedrock 纳入使用生成式人工智能进行构建的新工具集。Amazon Bedrock 是一项完全托管的服务&#xff0c;提供各种来自领先 AI 公司&#xff08;包括 AI21 Labs、Anthropic、Cohere、Stability AI 和 Amazon 等&#xf…

【COMP305 LEC 3 LEC 4】

LEC 3 A basic abstract model for a biological neuron 1. Weights of connections Neuron gets fired if it has received from the presynaptic neurons 突触前神经元 a summary impulse 脉冲, which is above a certain threshold. Signal from a single synapse突触 ma…

LiveQing视频点播流媒体RTMP推流服务功能-如何配置资源进行轮巡播放视频轮播分屏展示

LiveQing视频点播流媒体RTMP推流服务功能-如何配置资源进行轮巡播放视频轮播分屏展示 1、分屏展示2、右击节点新建分组3、配置轮播间隔(秒&#xff09;4、选择资源5、轮巡播放6、停止分组播7、切换播放的流类型8、RTMP推流视频直播和点播流媒体服务 1、分屏展示 2、右击节点新建…

towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本

towxml的使用&#xff0c;在微信小程序中快速将markdown格式渲染为wxml文本 Towxml概述安装下载 Towxml在小程序中使用 towxml Towxml概述 towxml3.0 支持以下功能&#xff1a; ● echarts图表&#xff0c;默认禁用&#xff0c;需自行构建以开启此功能 ● LaTeX数学公式&#…

【linux】Linux 查看内存使用情况的几种方法汇总

文章目录 GUI 查看命令获取命令 free命令 vmstat命令 top命令 htop Linux 查看内存使用情况的几种方法包括使用 free 命令、top 命令、htop 命令、vmstat 命令和/proc/meminfo 文件。这些方法可以帮助用户了解系统内存的使用情况&#xff0c;包括总内存、已用内存、空闲内存、缓…

FPGA的64点FFT代码及报告,verilog快速傅里叶变换

名称&#xff1a;64点FFT快速傅里叶变换Radix4 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 使用verilog实现64-point Pipeline FFT处理器 FPGA代码资源下载网&#xff1a;hdlcode.com 代码下载&#xff1a; 名称&#xff1a;64点FFT快速傅里…

16.1 Socket 端口扫描技术

端口扫描是一种网络安全测试技术&#xff0c;该技术可用于确定对端主机中开放的服务&#xff0c;从而在渗透中实现信息搜集&#xff0c;其主要原理是通过发送一系列的网络请求来探测特定主机上开放的TCP/IP端口。具体来说&#xff0c;端口扫描程序将从指定的起始端口开始&#…

消失的它:网络层分片包中的第一个分片包去哪了?

在网络层IP包分片的过程中&#xff0c;遇到了大麻烦&#xff01; 主机A&#xff1a; IP地址&#xff1a;192.168.0.10/24 MAC地址&#xff1a;02:00:00:00:00:10 主机B&#xff1a; IP地址&#xff1a;192.168.0.20/24 MAC地址&#xff1a;02:00:00:00:00:20 MTU&#xff1a;1…

16.The Tensor Product:Vector/Covector combinations

本节将概括目前为止所学的张量积知识。并讨论一般张量&#xff0c;它可以由任意数量的向量和协向量的任意组合来生成。 同样&#xff0c;也是使用的非标准的符号。 (2&#xff0c;0)阶张量&#xff0c; 由两个向量生成的。 &#xff08;1&#xff0c;2&#xff09;阶张…

人人自媒体的时候,Ai绘画还值得踏入吗?

前言 先说结论&#xff0c;如果你不打算涉足自媒体&#xff0c;平时也从不上网发什么内容去展示自己的话&#xff0c;其实AI绘画对你来说意义不大。但如果你对自媒体感兴趣&#xff0c;会涉及发作品&#xff0c;发内容&#xff0c;甚至去设计图片&#xff0c;那么AI绘画值得你…

2023年“绿盟杯”四川省大学生信息安全技术大赛

pyfile 先check源码&#xff0c;没什么发现&#xff0c;接着进行目录扫描&#xff0c;扫到路径 /download 下载备份文件得到 www.zip&#xff0c;解压得到app.py 大致审一下代码&#xff1a; 在read目录下给file传参进行请求&#xff0c;如果这个东西存在就会读取出来 这里…

Node学习笔记之Node简介

一、Node简介 1.1、为什么学习Node(了解) 企业需求 增加自身职业竞争力 进一步理解 Web&#xff0c;并有助于明白后端开发 大前端必备技能 为了更好的学习前端框架 ... ... 1.2、Node是什么 Node.js是基于 Chrome的V8 JavaScript 引擎构建的JavaScript运行环境。 Node.js不是新…

渗透测试--JWT攻防(一)

JWT简介 JWT代表JSON Web Token&#xff0c;它是一种用于安全地在不同实体之间传递信息的开放标准&#xff08;RFC 7519&#xff09;。JWT通常用于身份验证和授权领域&#xff0c;以及在网络应用程序和服务之间传递声明&#xff08;claims&#xff09;信息。 JWT的常见用途包括…

【Redis】主从复制

目录 单点问题主从模式如何启动多个redis-server建立主从关系断开连接安全性只读传输延迟拓扑结构一主一从一主多从树型结构 主从复制的基本流程replicationid的作用offset的作用全量复制和部分复制全量复制的无硬盘模式关于runid和replid部分复制实时复制 单点问题 如果某个服…

07-React-redux和redux的使用

07.react-redux和redux的使用 1.redux的使用 1).redux的理解 a.redux是什么 redux是一个专门用于做状态管理的JS库(不是react插件库)。它可以用在react, angular, vue等项目中, 但基本与react配合使用。作用: 集中式管理react应用中多个组件共享的状态。 b.什么情况下需要使…

Lake Formation 和 IAM 之间的区别与联系

IAM 和 Lake Formation 都是 AWS 上的权限管理服务,且默认都是自动开启并生效的,只是如果你没有特别配置过它们,可能感觉不到它们的存在,特别是Lake Formation(后文简写为 LF),通常情况下都是“透明”的,但它确实在每次请求时进行了权限检查。本文会详细介绍一下两者之…

CPU飙高问题排查命令

1. 远程客户端连接服务器,top命令查看cpu占用最高的进程id 2. (top -H -p 进程pid) 命令: 找出进程里面线程占用CPU高的线程有哪些 ? 3. (printf 0x%x\n 线程id) 线程id转16进制 4. (./jstack PID | grep TID(十六进制) -A 30)

【rust/树莓派】使用rppalembedded-graphics控制st7789 LCD屏幕

说在前面 树莓派版本&#xff1a;4bLCD模块&#xff1a;ST7789V2 240*280 LCD树莓派系统&#xff1a;Linux raspberrypi 5.15.76-v8 #1597 SMP aarch64 GNU/Linuxrust版本&#xff1a;rustc 1.73.0 模块详情 某雪的1.69inch LCD模块&#xff0c;包含杜邦线 准备工作 树莓派…