当前位置: 首页 > news >正文

SpringBoot:WebSocket实现消息撤回、图片撤回

下面只是讲述一下实现思路,代码基本没有哈!有时间单独发表一篇关于websocket的相关操作的博客。

请添加图片描述
请添加图片描述

1. 消息撤回、图片撤回

个人觉得关于撤回,需要下述几个过程:

  • 发送的消息的标签上可以定义一个属性,这个属性的值应该是唯一的,js简单实现如下:
randomId:function () {let time = new Date().getTime();// 时间戳let num1 = Math.floor(Math.random()*1000);let str_1 = time + '' + num1;let ans = '';for(let i=0;i<str_1.length;i++){ans += String.fromCharCode(parseInt(str_1[i])+97);}return ans;}// 生成随机id

上述代码用时间戳结合随机数实现属性值的唯一性。

  • 发送消息这一端撤回消息只需简单使用js进行标签删除即可;在接收端这一端撤回消息操作为需要发送消息端ws.send往服务器发送一条消息,然后服务器进行转发,除了不转发到发送消息端的用户之外,其他用户的客户端那边都应该接收到这一条消息,这条消息的数据应该有上述那个唯一值(id),然后在消息栏那里找到这个属性值是这个唯一值(id)的标签,进行相关js操作标签删除即可。
  • 如果还想实现下述提示信息,对于在消息撤回发起端,只需在当前删除标签元素后再插入一个标签元素即可,而在消息撤回接收端ws.onmessage需要做的就是删除这个消息标签元素之前,获取到这个标签元素的用户信息,之后操作和消息撤回发起端基本一致。

消息撤回发起端

消息撤回发起端

消息撤回接收端
消息撤回接收端

2. AI 讲的撤回消息操作

  • 在客户端实现撤回功能,即当用户想要撤回某条消息时,客户端将该消息标记为已删除,并发送一条删除消息到服务器,让服务器知道用户的操作。在其他客户端上,该消息将被标记为已删除并不再显示。

  • 使用消息历史记录来实现撤回功能。在服务器端,将所有消息存储到数据库中,并保留消息的时间戳。当用户想要撤回某条消息时,服务器将该消息标记为已删除,并将所有其他客户端的历史消息重新加载以显示更新内容。

  • 实现“防止误操作”的策略。这种策略可以避免用户发送错误的消息。例如,用户发送消息后,将等待一段时间以进行确认,如果用户在此期间撤回了消息,则系统将撤回消息。否则,消息将被发送并不可撤回。

可以看到AI说的第一点和上述基本一致,其他两种高深一些哈!

相关文章:

SpringBoot:WebSocket实现消息撤回、图片撤回

下面只是讲述一下实现思路&#xff0c;代码基本没有哈&#xff01;有时间单独发表一篇关于websocket的相关操作的博客。 1. 消息撤回、图片撤回 个人觉得关于撤回&#xff0c;需要下述几个过程&#xff1a; 发送的消息的标签上可以定义一个属性&#xff0c;这个属性的值应该是…...

输出指定日期区间内的所有天、周、月

部分方法需要依赖hutool工具包。 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.10</version> </dependency>需求&#xff1a;输出2023-04-17到2023-05-23期间所有的天、周、月。…...

【线性规划模型】

线性规划模型&#xff1a;原理介绍和预测应用 引言 线性规划是运筹学中一种重要的数学优化方法&#xff0c;被广泛应用于各个领域&#xff0c;包括工业、经济、物流等。 线性规划模型的原理 线性规划模型的目标是在一组线性约束条件下&#xff0c;寻找一组变量的最优解&…...

android 12.0卸载otg设备开机不加载otg设备

1.概述 在12.0定制化开发过程中,客户有功能需求,通过系统属性值控制是否加载挂载otg设备,当设置为卸载模式时,要求不能挂载otg设备,开机也不能挂载otg设备 2.卸载otg设备开机不加载otg设备的核心代码 frameworks/base/services/core/java/com/android/server/StorageMan…...

通过 Wacom 的 Project Mercury 提高远程办公效率

过去几年中&#xff0c;我们的工作方式发生了翻天覆地的变化。疫情加快了对远程办公和协作的采纳&#xff0c;导致人们更加依赖技术来联系团队和提高工作效率。 但是&#xff0c;那些依靠专门硬件和软件来完成工作的创作者呢&#xff1f;艺术家、设计师和开发人员需要使用专门…...

Linux-0.11 文件系统namei.c详解

Linux-0.11 文件系统namei.c详解 模块简介 namei.c是整个linux-0.11版本的内核中最长的函数&#xff0c;总长度为700行。其核心是namei函数&#xff0c;即根据文件路径寻找对应的i节点。 除此以外&#xff0c;该模块还包含一些创建目录&#xff0c;删除目录&#xff0c;创建目…...

计算机网络学习笔记

<!-- GFM-TOC --> 计算机网络体系结构 传输层&#xff1a;TCP和UDP 什么是三次握手&#xff1f; 什么是四次挥手&#xff1f; TCP如何实现流量控制&#xff1f; TCP的拥塞控制是怎么实现的&#xff1f; TCP如何最大利用带宽&#xff1f; TCP与UDP的区别 TCP如何保…...

Pod相关操作命令

Pod相关操作命令 Pod setup # CocoaPods 将信息下载到~/.cocoapods/repos 目录下。如果安装 CocoaPods 时不执行此命令&#xff0c;在初次执行pod intall 命令时&#xff0c;系统也会自动执行该指令 pod --version # 检查 CocoaPods 是否安装成功及其版本号 pod repo update #…...

图灵完备游戏:信号计数 解法记录

使用1个全加器 2个半加器完成。这关的思想主旨在于如何把输出4&#xff0c;输出2&#xff0c;输出1的情况统一在一根导线上。 首先用一个全加器来完成输入2-4这三个引脚的计数&#xff0c;因为全加器输出范围二进制是00 - 11&#xff0c;而输入正好有两个引脚数位是2和1&…...

数据结构图的基础概念

1、图的概念 图(Graph)&#xff1a;是由顶点的有穷非空集合和顶点之间边的集合组成。顶点(Vertex)&#xff1a;图中的数据元素。边(Edge)&#xff1a;顶点之间的逻辑关系,边可以是有向的或无向的&#xff0c;也可以带有权重&#xff08;可以表示距离&#xff0c;花费等&#xf…...

一场九年前的“出发”:奠基多模态,逐鹿大模型

原创&#xff1a;谭婧 全球AI大模型的技术路线&#xff0c;没有多少秘密&#xff0c;就那几条路线&#xff0c;一只手都数得过来。 而举世闻名的GPT-4浑身上下都是秘密。 这两件事并不矛盾。为什么呢&#xff1f; 这就好比&#xff0c;回答“如何制造一台光刻机&#xff1f;”。…...

什么是url跳转漏洞?

什么是url跳转漏洞 简介原因&#xff1a;如何防止 简介 URL跳转漏洞是一种Web应用程序安全问题&#xff0c;指的是在应用程序处理URL跳转时&#xff0c;由于程序员的疏忽或设计不当&#xff0c;攻击者可能通过构造恶意URL来实现对应用程序的攻击。 原因&#xff1a; 跳转条件…...

生物学经典blast比对算法,R语言和Python如何实现?

Blast比对算法原理与实现方式 做生物的同学肯定听说过blast比对这个方法&#xff0c;一般在NCBI等网站上可以在线进行比对&#xff0c;也可以在本地服务器进行比对&#xff0c;那么blast算法究竟是怎么实现对不同序列的比对呢&#xff1f; 本文分享经典blast算法的基础原理&…...

Android 开机动画支持mp4格式视频播放

前 言 Android系统在启动的过程中&#xff0c;最多可以出现三个画面&#xff0c;每一个画面都用来描述一个不同的启动阶段。无论是哪一个画面&#xff0c;它们都是在一个称为帧缓冲区&#xff08;frame buffer&#xff0c;简称fb&#xff09;的硬件设备上进行渲染的。 自定义…...

软考A计划-试题模拟含答案解析-卷十

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…...

Kafka入门(安装和SpringBoot整合)

文章目录 一、Docker安装Kafka1. 创建网络2. 安装zookeeper3. 安装Kafka 二、Kafka介绍1. Kafka简介 三、SpringBoot整合Kafka1. 引入pom依赖2. application.propertise配置3. Hello Kafka(Producer)4. Consumer Kafka5. 带回调的生产者6. 自定义分区器7. kafka事务提交8. 指定…...

gitLab相关命令

gitLab相关命令 1) 远程仓库相关命令 git clone 远程仓库地址 #检出仓库git remote -v #查看远程仓库git remote add [name][url] #添加远程仓库&#xff0c;git remote add origin 远程仓库地址git remote rm [name] #删除远程仓库&#xff0c;git remote rm origingit remo…...

一些查看日志时的常用命令

文章目录 1、grep -r 搜索内容 *2、l * 关键字 *3、tail -f 文件名4、tail -n X 文件名5、cat 文件名 | grep "关键字" -C X同理可得&#xff0c;-A同理可得&#xff0c;-B 一些查看日志时的常用命令 1、grep -r 搜索内容 * 作用&#xff1a;在一堆文件里&#xff0…...

Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收

执行环境有全局执行环境和函数执行环境之分&#xff0c;每次进入一个新执行环境&#xff0c;都会创建一个搜索变量和函数的作用域链。函数的局部环境不仅有权访问函数作用于中的变量&#xff0c;而且可以访问其外部环境&#xff0c;直到全局环境。全局执行环境只能访问全局执行…...

CRDT协同算法

CRDT的英文全称是Conflict-free Replicated Data Type&#xff0c;最初是由协同文本编辑和移动计算而发展的&#xff0c;现在还被用作在线聊天系统、音频分发平台等等。当前CRDT算法在富文本编辑器领域的协同依旧是典型的场景&#xff0c;常用于作为实现文档协同的底层算法&…...

近代中国的三次思想文化运动

1、戊戌变法中维新派顽固派论战 第一次思想解放潮流是1898年维新派与顽固势力的论战。论战的内容有&#xff1a;要不要变法&#xff0c;要不要兴民权、实行君主立宪&#xff0c;要不要提倡西学、改变教育制度。此次论争是资本主义思想同封建主义思想的正面交锋&#xff0c;此后…...

《地铁上的面试题》--目录

第一部分&#xff1a;基础 数据结构与算法 1.1 数组和链表 1.2 栈和队列 1.3 树和图 1.4 排序和搜索算法 1.5 动态规划和贪心算法 操作系统 2.1 进程与线程 2.2 内存管理 2.3 文件系统 2.4 进程同步与通信 2.5 虚拟化和容器化技术 计算机网络 3.1 TCP/IP协议 3.2 HTTP和HTTPS…...

在VIVADO下烧写ZC706板载FLASH的操作步骤

1&#xff0c;原理图分析 首先看原理图&#xff0c;我们兼容ZC706的板子有两片 FLASH&#xff0c;型号是S25FL128A,连接方式如下&#xff1a; 可以看到两片是分别接在了XC7Z045芯片的引脚上&#xff0c;是互不相干的并联方式&#xff0c;每个FLASH芯片支持X4模式&#xff0c;也…...

第二期:链表经典例题(两数相加,删除链表倒数第N个节点,合并两个有序列表)

每道题后都有解析帮助你分析做题&#xff0c;答案在最下面&#xff0c;关注博主每天持续更新。 PS&#xff1a;每道题解题方法不唯一&#xff0c;欢迎讨论&#xff01; 1.两数相加 题目描述 给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式…...

ESP32设备驱动-SHT35湿度传感器驱动

SHT35湿度传感器驱动 1、SHT35介绍 SHT35 数字温湿度传感器基于 Sensirion SHT35 传感器 IC。 得益于Sensirion的CMOSens技术,高度集成的电容式湿度传感元件和带隙温度传感元件,SHT35具有高可靠性和长期稳定性,功耗低,响应速度快,抗干扰能力强。 传感器支持IIC通信,兼容…...

如何快速判断GitLab 是否出现 OOM

查看系统日志&#xff1a; 使用 dmesg 命令来查看系统日志&#xff0c;搜索 Out of memory 关键字&#xff1a; sudo dmesg | grep -i "out of memory"如果输出结果中包含 Out of memory 或 oom-killer 等关键字&#xff0c;则表示系统出现了 OOM。 查看 GitLab 日…...

Word查找和替换通配符(完全版)

Word查找栏代码通配符一览表 序号 清除使用通配符复选框 勾选使用通配符复选框 特殊字符 代码 特殊字符 代码or通配符 1 任意单个字符 ^? 任意单个字符 ? 2 任意数字 ^# 任意数字&#xff08;单个&#xff09; [0-9] 3 任意英文字母 ^$ 任意英文字母 [a…...

Linux下socketpair系统API调用使用说明

目录 1.socketpair函数说明 2.socketpair使用举例 在阅读nginx源码时&#xff0c;发现其调用socketpair来实现master和worker进程之间进行数据交互。其代码如下&#xff1a; 思考&#xff1a;master和worker进程是父子关系&#xff0c;有亲属关系的进程通过pipe/pipe2&#x…...

【Netty】Future 源码分析(十六)

文章目录 前言一、JDK 的 Future 接口二、Netty 的 Future 接口三、ChannelFuture 接口总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&#xff09;Netty Channel 概述&#xff08;三&#xff09;Netty Channel…...

5月《中国数据库行业分析报告》正式发布,首发时序、实时数据库两大【全球产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况&#xff0c;从2022年4月起&#xff0c;墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》&#xff0c;持续传播数据技术知识、努力促进技术创新与行业生…...