苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能
WebSocket介绍
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。
HTTP协议和WebSocket协议对比:
- HTTP是短连接
- WebSocket是长连接
- HTTP通信是单向的,基于请求响应模式
- WebSocket支持双向通信
- HTTP和WebSocket底层都是TCP连接
思考:既然WebSocket支持双向通信,功能看似比HTTP强大,那么我们是不是可以基于WebSocket开发所有的业务功能?
WebSocket缺点:
服务器长期维护长连接需要一定的成本 各个浏览器支持程度不一 WebSocket 是长连接,受网络限制比较大,需要处理好重连
结论:WebSocket并不能完全取代HTTP,它只适合在特定的场景下使用
WebSocket应用场景:
1). 视频弹幕
2). 网页聊天 (最典型)
3). 体育实况更新
来单提醒
需求分析和设计
用户下单并且支付成功后,需要第一时间通知外卖商家。通知的形式有如下两种:
- 语音播报
- 弹出提示框

设计思路:
- 通过WebSocket实现管理端浏览器和服务端保持长连接状态
- 当客户支付后,调用WebSocket的相关API实现服务端向管理端浏览器推送消息
- 管理端浏览器解析服务端推送的消息,判断是来单提醒还是客户催单,进行相应的消息提示和语音播报
- 约定服务端发送给管理端浏览器的数据格式为JSON,字段包括:type,orderId,content
- type 为消息类型,1为来单提醒 2为客户催单
- orderId 为订单id
- content 为消息内容
代码开发
在OrderServiceImpl中注入WebSocketServer对象,修改paySuccess方法,加入如下代码:
当商家管理端浏览器接收到这个消息, 就是前端代码负责的了
客户催单
需求分析和设计
用户在小程序中点击催单按钮后,需要第一时间通知外卖商家。通知的形式有如下两种:
- 语音播报
- 弹出提示框
设计思路:
- 通过WebSocket实现管理端页面和服务端保持长连接状态
- 当用户点击催单按钮后,调用WebSocket的相关API实现服务端向管理端推送消息
- 管理端浏览器解析服务端推送的消息,判断是来单提醒还是客户催单,进行相应的消息提示和语音播报
- 约定服务端发送给管理端浏览器的数据格式为JSON,字段包括:type,orderId,content
- type 为消息类型,1为来单提醒 2为客户催单
- orderId 为订单id
- content 为消息内容
当用户点击催单按钮时,向服务端发送请求。
代码开发
Controller层
根据用户催单的接口定义,在user/OrderController中创建催单方法:

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

Mapper层
在OrderMapper中添加getById:
演示
用户进行催单
用户可在订单列表或者订单详情,进行催单

查看催单提醒
相关文章:
苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能
WebSocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP…...
网站如何应对网络流量攻击
网络安全问题中,受到流量攻击是一种常见挑战。以下是一系列的专业建议,帮助您预防和减轻这类攻击,从而确保您的网站和数据的安全。 使用 Web 应用程序防火墙 (WAF) Web 应用程序防火墙是一项专门的安全工具,能够检测和拦截恶意流…...
设置Json序列化时字段的顺序
1. 背景 在部分使用场景(如元数据驱动,后台接口仅返回序列化后的json字符串,前端需要根据每个字段在前端呈现),需要手动设置字段的长度。通常情况下,框架是有默认的顺序,如 jackson 默认使用字…...
AcWing5277. 三元组
给定一个长度为 n 的正整数数组 a1,a2,…,an 请你计算,一共有多少个三元组 (i,j,k)(1≤i<j<k≤n),使得 ai⋅aj⋅ak 为最小可能值。 输入格式 第一行包含整数 n。 第二行包含 n 个正整数 a1,a2,…,an。 输出格式 一个整…...
【LeetCode热题100】--121.买卖股票的最佳时机
121.买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {int minprice Integer.MAX_VALUE;int maxprofit 0;for(int i 0;i<prices.length;i){if(prices[i] < minprice){minprice prices[i]; //找到最小值}else if(prices[i] - minprice > ma…...
高精度计算
1.高精度加法: 两个非常大的数相加. 代码如下: #include <iostream> #include <cstring> #include <algorithm> #include <vector>using namespace std;vector<int> add(vector<int>&A,vector<int>&am…...
KMP 算法 + 详细笔记
给两个字符串,T"AAAAAAAAB",P"AAAAB"; 可以暴力匹配,但是太费时和效率不太好。于是KMP问世,我们一起来探究一下吧!!! (一)最长公共前后缀 D[i] p[…...
基于主动移频法与AFD孤岛检测的单相并网逆变器matlab仿真
微❤关注“电气仔推送”获得资料(专享优惠) 仿真模型 算法介绍 (1)仿真模型由单相电网、逆变器、滤波环节、PI控制器、PWM生成器、锁相环、AFD控制器s函数、测量模块等构成; (2)采用主动移频法(AFD)进行孤岛检测; (3)相应速度…...
MIT 6.S081 Operating System/Fall 2020 macOS搭建risc-v与xv6开发调试环境
文章目录 本机配置安装环境Homebrew执行安装脚本查看安装是否成功 RISC-V tools执行brew的安装脚本 QEMUXV6 测试有用的参考链接(感谢前辈)写在结尾 本机配置 电脑型号:Apple M2 Pro 2023 操作系统:macOS Ventura 13.4 所以我的电…...
JMeter定时器
一. 同步定时器(Synchronizing Timer) (在Loadrunner中叫做集合点) 思考: 如何模拟多个用户同时抢一个红包?如何测试电商网站中抢购活动、秒杀活动? 1.1 介绍 Sync Timer的目的是阻塞线程,直…...
zookeeper应用场景(二)
单机环境下可以利用jvm级别的锁,比如synchronized、Lock等来实现锁,如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分…...
Android webView加载高德地图定位不显示问题
如果只显示地图 val webView: WebView findViewById(R.id.webView)webView.settings.javaScriptEnabled truewebView.loadUrl("https://test.cn")//h5地址 如果需要定位,则需要加以下代码,否则不弹窗 webView.webChromeClient object : We…...
94. 二叉树的中序遍历(递归+迭代)
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路: 方法一:递归 中序遍历的操作定义为,若二叉树为空,则空操作,否则: 中序遍历左子树访问根节点中…...
UGUI交互组件Slider
一.Slider对象的结构 对象介绍Slider附加Slider组件Background背景Fill Area填充范围Fill填充对象Handle Slider Area滑块移动范围Handle滑块 二.Slider组件属性 属性说明Fill Rect关联填充对象Handle Rect关联滑块对象Direction设置方向Min Value最大取值Max Value最小取值Wh…...
JAVA经典百题之按位或运算符 `|的使用
当学习Java语言中的按位或运算符 | 时,需要理解其用途、应用场景、示例源代码以及相应的注意事项。以下是一篇关于Java语言按位或运算符的详细文章,包括示例源代码和注释。 Java语言中的按位或运算符 | 按位或运算符 | 是Java语言中用于对二进制位进行…...
C多线程编程- 近似求解π
本程序使用蒙特卡洛方法估算圆周率(π)。它首先创建了指定数量的线程,每个线程生成一个随机点并检查该点是否在单位圆内。基于这些线程的结果,程序计算在单位圆内的点的比例,并乘以4来估算π的值。为了对比,…...
YOLOV7量化第二步: 模型标定
2.模型标定 当然可以,模型量化中的标定(calibration)是一个关键过程,它主要确保在降低计算精度以减少模型大小和提高推理速度的同时,不会显著损害模型的准确性。现在,我将根据您提供的步骤解释这一过程。 …...
前端-uniapp-开发指南
美团外卖微信小程序开发 uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端,学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并发请求 uni-app框架调用https接口 开发小程…...
Java集合类ArrayList的应用-杨辉三角的前n行
目录 一、题目 杨辉三角 二、题解 三、代码 四、总结 一、题目 题目链接:https://leetcode.cn/problems/pascals-triangle/description/ 杨辉三角 题目描述:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨…...
C语言-函数
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() 。 主函数可以调用其他函数,其他函数也可以相互调用,用户也可以那个自定义函数。 函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实…...
3分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能脚本使用指南
3分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能脚本使用指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统激活烦恼吗?Windows提示许可证过期,…...
为什么你的`@jit(cache=True)`反而变慢了?Python 3.14 JIT缓存键生成算法变更深度解析(附3.13→3.14 ABI不兼容警告)
第一章:Python 3.14 JIT 编译器性能调优 面试题汇总Python 3.14 引入了实验性内置 JIT(Just-In-Time)编译器,基于 PGO(Profile-Guided Optimization)与轻量级字节码重写机制,在 CPU-bound 场景下…...
大数据在电力行业应用案例解析 -【电力技术】(25)RPA 在电力业扩报装中的自动化应用与实现
目录 一、引言:业扩报装的效率瓶颈 二、RPA 技术特点与电力适用性 三、RPA 在业扩报装中的四大核心应用场景 3.1 预受理自动审核 3.2 批量用户信息自动导入 3.3 勘查工单自动派工 3.4 流程自动流转与归档 四、RPA 实施流程(标准化) 五、典型应用成效 六、完整可运行…...
Go Interface 与类型断言的实践
Go语言中的Interface与类型断言是提升代码灵活性的重要工具。Interface定义了方法集合,允许不同类型实现相同行为,而类型断言则能在运行时检查接口值的具体类型。本文将深入探讨其核心实践技巧,帮助开发者编写更优雅的Go代码。接口定义与实现…...
3个步骤搞定本地OCR:让隐私保护与效率提升不再矛盾
3个步骤搞定本地OCR:让隐私保护与效率提升不再矛盾 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…...
LAMMPS read_data命令保姆级教程:从MS建模到data文件生成的完整避坑指南
LAMMPS read_data命令全流程实战:从分子建模到多体系合并的进阶指南 当你在Materials Studio中精心构建的分子模型终于完成,准备转入LAMMPS进行分子动力学模拟时,是否曾被data文件的各种格式要求绊住脚步?作为连接建模软件与计算引…...
VRCT完全指南:在VRChat中打破语言障碍的终极解决方案
VRCT完全指南:在VRChat中打破语言障碍的终极解决方案 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT VRCT(VRChat Chatbox Translator & Transcription&…...
从三角函数到雷达滤波:三角窗的DSP实现与性能测试全记录
从三角函数到雷达滤波:三角窗的DSP实现与性能测试全记录 1. 三角窗的数学本质与信号处理价值 在数字信号处理领域,窗函数就像是一位精密的调音师,能够对原始信号进行细致的修饰和调整。三角窗作为其中最基础却又最富特色的成员之一࿰…...
万象视界灵坛实战教程:广告Banner图受众情绪倾向语义解析实践
万象视界灵坛实战教程:广告Banner图受众情绪倾向语义解析实践 1. 平台介绍与核心能力 万象视界灵坛是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的图像语义分析过程转化为直观的交互体验,特别适合需要快速理解视觉内容情感倾向的营销…...
3个高效步骤掌握B站视频下载工具:从解析到批量管理的完整方案
3个高效步骤掌握B站视频下载工具:从解析到批量管理的完整方案 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具,支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析,可扫码登录,常驻托盘。 项目地址: https://gitcode.com/…...
