【Spring Boot】使用WebSocket协议完成来单提醒及客户催单功能

1 WebSocket介绍

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。

1.1 HTTP协议和WebSocket协议对比

1、HTTP是短连接,WebSocket是长连接
2、HTTP通信是单向的,基于请求响应模式,WebSocket支持双向通信
3、HTTP和WebSocket底层都是TCP连接

1.2 WebSocket缺点

1、服务器长期维护长连接需要一定的成本,各个浏览器支持程度不一,WebSocket是长连接,受网络限制比较大
2、WebSocket不能完全取代HTTP,适用于视频弹幕、王网页聊天和体育实况更新。

2 来单提醒

用户下单并且支付成功后,需要第一时间通知外卖商家。通知的形式有如下两种:
(1)语音播报
(2)弹出提醒框

2.1 设计思路:

(1)通过WebSocket实现管理端浏览器和服务端保持长连接状态
(2)当客户支付后,调用WebSocket的相关API实现服务端向管理端浏览器推送消息
(3)管理端浏览器解析服务端推送的消息,判断是来单提醒还是客户催单,进行相应的消息提示和语音播报
(4)约定服务端发送给管理端浏览器的数据格式为JSON,字段包括:type,orderId,content

private WebSocketServer webSocketServer;
/*** 支付成功,修改订单状态*/
public void paySuccess(String outTradeNo){//当前登录用户IdLong userId = BaseContext.getCurrentId();// 根据订单号查询当前用户的订单Orders ordersDB = orderMapper.getByNumberAndUserId(outTradeNo,userId);// 根据订单id更新订单的状态、支付方式、支付状态、结账时间Orders orders = Orders.builder().id(ordersDB.getId()).status(Orders.TO_BE_CONFIRMED).payStatus(Orders.PAID).checkoutTime(localSateTime.now()).build();orderMapper.update(orders);// map是一个JS对象Map map = new HashMap();map.put("type", 1);map.put("orderId", orders.getId());map.put("content", "订单号:" + outTradeNo);// JSON字符串发送给管理端浏览器//JSON.toJSONString()函数叫做序列化//JSON.parse()函数叫做反序列化webSocketServer.sendToAllClient(JSON.toJSONString(map));
}

当商家管理端浏览器接收到这个消息之后, 前端代码负责其他工作。

2.2 什么是数据交换格式?

(1)数据交换格式,就是服务器端和客户端之间进行数据传输和交换的格式
(2)前端领域,经常提及的两种数据交换格式分别是XML和JSON。其中XML用的非常少。
(3)
在这里插入图片描述
XML
XML 的英文全称是 EXtensible Markup Language,即可扩展标记语言。因此,XML 和 HTML 类似,也是一种标记语言。
XML和HTML的区别:HTML被设计用来描述网页上的内容,是网页内容的载体;XML被设计用来传输和存储数据,是数据的载体。
XML缺点:XML格式臃肿,和数据无关的代码多,体积大,传输效率低;在javascript中解析XML比较麻烦

JSON
JSON的英文全称是javaScript Object Notation, 即“JavaScript 对象表示法”。JSON就是Javascript对象和数组的字符串表示法,它使用文本表示一个JS对象或数组的信息,因此,JSON的本质是字符串
作用:JSON是一种轻量级的文本数据交换格式,在作用上类似XML,专门用于存储和传输数据,但是JSON比XML更小,更快,更易解析。

JSON的两种结构

  1. 对象结构:对象结构在JSON中用{ }。数据结构为{key: value, key: value, …}的键值对结构。其中,key必须是使用英文的双引号包裹的字符串。
[ "java", "python", "c" ]
[ 100, 200, 300.5 ]
[ true, false, null ]
[ { "name": "zhangsan", "age": 20}, { "name": "spring", "age": 22} ]
  1. 数组结构:[ ]括起来,数据结构为[“java”, “javascript”, 30,true…]。数组中数据的类型可以是数字、字符串、布尔值、null、数组、对象6种类型。
[ "java", "python", "c" ]
[ 100, 200, 300.5 ]
[ true, false, null ]
[ { "name": "zhangsan", "age": 20}, { "name": "spring", "age": 22} ]

JSON 的作用:在计算机与网络之间存储和传输数据。
JSON 的本质:用字符串来表示 Javascript 对象数据或数组数据

3 客户催单

用户在小程序中点击催单按钮后,需要第一时间通知外卖商家。通知的形式有如下两种:

  • 语音播报
  • 弹出提示框

3.1 设计思路:

具体过程同2.1。

3.2 代码开发

Controller层
根据用户催单的接口定义,在user/OrderController中创建催单方法:

public Result reminder(Long id){orderService.reminder(id);return Result.success();
}

Service层实现类
在orderServicelmpl中实现reminder方法:

public void reminder(Long id){//查询订单是否存在Order orders = orderMapper.getById(id);if (orders == null){throw new OrderBusinessException(MessageContant.ORDER_NOT_FOUND);
}
//基于WebSocket实现催单
Map map = new HashMap();
map.put("type", 2);
map.put("orderId",id);
map.put("content","订单号:"+ orders.getNumber());
webSocketServer.sendToAllClient(JSON.toJSONString(map));
}

Mapper层
在orderMapper中添加getById:

//根据用户id查询订单
Orders getById(Long id);

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

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

相关文章

SMB over QUIC帮助实现文件服务器在公网安全共享

要在Internet边缘服务器提供安全、可靠的共享连接,可以通过安全的SMB over QUIC来取代传统的TCP网络传输。 QUIC 是 IETF 标准化协议,与 TCP 相比具有许多优势: 所有数据包始终加密,握手使用 TLS 1.3 进行身份验证可靠和不可靠应…

Linux常用命令亲测总结

在实际开发中,经常会进行下位机的搭建,在搭建过程中,对于常用的LInux命令进行总结,方便自己使用 1.rm -rf 删除对应文件(字节小的) 2、ln -s 文件关联(长的关联短的。三个则关联两次&#xff0…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(六)

新增菜品 1.1 需求分析与设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 2.2 代码开发2.2.1 文件上传实现2.2.2 新增菜品实现 2.3 功能测试 1.1 需求分析与设计 1.1.1 产品原型 后台系统中可以管理菜品信息,通过 新增功能来添加一个新的菜品,在添加菜品…

vue使用本地图片设置为默认图

一、引用 import imgSrc /assets/common/image/xxx.png 二、赋值给变量 defaultImg:imgSrc, 三、将变量给img标签 <img :src"defaultImg:imgSrc" alt"icon"> 注意&#xff1a;这里直接使用路径给变量是无法实现的哟

解决ubuntu23.10 virtualbox 启动错误modprobe vboxdrv, Kernel driver not installed

- 参考视频&#xff1a;https://www.youtube.com/watch?vAKAq2LGu_zs sudo apt updatesudo apt install --reinstall linux-headers-$(uname -r) virtualbox-dkms dkms# 重启系统&#xff0c;然后再执行下面一条命令sudo modprobe vboxdrv

Ubuntu 下C++数字雨

以前写过一个Window下的数字雨&#xff0c;像黑客帝国里那样的01数字&#xff0c;现在补充一版Linux下的。使用了curses库&#xff0c;安装方法与使用方法参照 Linux下curses函数库的详细介绍_libcurses库-CSDN博客 5-linux学习笔记之-----curses-CSDN博客 效果如下&#xf…

JS删除对象的某个属性

JS中删除对象中的某个元素_笔记大全_设计学院 1、delete方法 2、...展开运算符

工作备忘录【react-native】

react-native 关闭全部黄色警告 index.js0.63之后 /*** format*/import {AppRegistry,LogBox} from react-native; import App from ./App; import {name as appName} from ./app.json; LogBox.ignoreAllLogs(true)//关闭全部黄色警告AppRegistry.registerComponent(appName…

拜托!佛系点,你只是给社区打工而已

社区人到年底了各种要写的东西很烦啊&#xff01;突然看到这个&#xff0c;真的谢谢啊&#xff01; 家人们谁懂啊&#xff1f;&#xff01;&#xff01;平时写个东西起码两三天&#xff0c;试了一下这东西&#xff01;输入需求&#xff0c;一键生成&#xff0c;写好了&#xf…

webpack快速上手之搭建cesium三维地球环境

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 Cesium介绍 初始化一个Cesium地球 ​编辑 Webpack的使用 Webpac…

汽车ECU的虚拟化技术初探(三)--U2A虚拟化辅助功能分析1

目录 1.基本概述 1.1 U2A虚拟化辅助功能 1.2 U2A虚拟化使能和资源分配 2. U2A架构概述 3. CPU运行模式 3.1 虚拟化模式 3.2 限制运行模式 3.3 权限运行模式 3.4 CPU运行模式小结 4.小结 1.基本概述 1.1 U2A虚拟化辅助功能 在汽车ECU的虚拟化技术初探(二)-CSDN博客中…

文心一言 VS 讯飞星火 VS chatgpt (139)-- 算法导论11.4 3题

三、用go语言&#xff0c;考虑一个采用均匀散列的开放寻址散列表。当装载因子为 3/4 和 7/8 时&#xff0c;试分别给出一次不成功查找和一次成功查找的探查期望数上界。 文心一言&#xff1a; 在开放寻址法中&#xff0c;当散列表的装载因子超过其阈值时&#xff0c;会触发重…

15.ORACLE11g的归档方式和日志文件的相关操作

ORACLE11g的归档方式和日志文件的相关操作 一、什么是日志文件1、在线日志文件2、归档日志文件 二、Oracle 11g 归档方式&#xff1a;1、归档方式状态2、归档日志方式下数据库的工作原理3、配置归档日志方式3.1 开启归档模式3.2 日志文件相关操作&#xff1a; 4、oracle11g联机…

前台查看日志功能

前台 <template><div id="logContent"><div class="onlinlog"><div class="left"><div class="number">显示字符数:<span><el-selectv-model="strNumber"placeholder="50000…

七、文件包含漏洞

一、文件包含漏洞 解释&#xff1a;文件包含漏洞是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行&#xff1b;其还能够使得服务器上的源代码被读取&#xff0c;在PHP里面我们把可重复使用的函数写入到单个文件中&#x…

【Linux】线程互斥

文章目录 线程互斥互斥量 mutex初始化互斥量加锁与解锁 可重入和线程安全常见的线程安全情况常见的线程安全的情况常见的不可重入情况常见的可重入情况可重入与线程安全联系可重入与线程安全区别 死锁死锁的四个必要条件避免死锁 线程互斥 进程线程间的互斥相关背景概念 临界…

深度学习:欠拟合与过拟合

1 定义 1.1 模型欠拟合 AI模型的欠拟合&#xff08;Underfitting&#xff09;发生在模型未能充分学习训练数据中的模式和结构时&#xff0c;导致它在训练集和验证集上都表现不佳。欠拟合通常是由于模型太过简单&#xff0c;没有足够的能力捕捉到数据的复杂性和细节。 1.2 模型…

前端 CSS 经典:省略号

1. 单行省略 .ellipsis {overflow: hidden;white-space: nowrap;text-overflow: ellipsis; } 2. 双行省略&#xff08;webkit 内核&#xff09; .ellipsis {display: -webkit-box; /* 显示多行文本容器 */-webkit-box-orient: vertical;-webkit-line-clamp: 2; /*显示行数*/…

API接口测试工具为什么尤其重要

在现代软件开发中&#xff0c;API接口测试工具扮演着关键的角色&#xff0c;连接不同的软件组件&#xff0c;实现数据传递和功能调用。为确保API的可靠性、安全性和性能&#xff0c;此工具成为不可或缺的一部分。本文将介绍API接口测试工具的重要性! 1. 自动化测试的效率 API接…

2023数维杯数学建模C题完整版本

已经完成全部版本&#xff0c;获取请查看文末下方名片 摘要 随着人工智能在多个领域的快速发展&#xff0c;其在文本生成上的应用引起了广泛关注。本研究聚焦于辨识人工智能&#xff08;AI&#xff09;生成文本的基本规则&#xff0c;并探究AI文本的检测及其与人类文本的区分…