苍穹外卖(八) 使用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:

 

演示

用户进行催单

用户可在订单列表或者订单详情,进行催单

 

查看催单提醒

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

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

相关文章

2022年下半年 软件设计师 上午试卷(前21题)

以下关于RISC(精简指令集计算机)特点的叙述中,错误的是 (1) 。 (1) A. 对存储器操作进行限制,使控制简单化 B. 指令种类多,指令功能强 C. 设置大量通用寄存器 D. 选…

【算法|动态规划No.23】leetcode376. 摆动序列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

【C#】【winform】Microsoft Visual Studio Installer Project 打包应用程序全部过程

提示:只针对扩展包来完成打包的工作过程。 文章目录 前言一、Microsoft Visual Studio Installer Project 是什么?二、安装1.安装Microsoft Visual Studio Installer Project 三、安开始打包1.添加setup1.在解决方案上面右键,添加-新建项目2.…

H5+Vue3编写官网,并打包发布到同一个域名下

背景 因为html5有利于搜索引擎抓取和收录我们网站更多的内容,对SEO很友好,可以为网站带来更多的流量,并且多端适配,兼容性和性能都非常不错,所以使用h5来编写官网首页。 因为用户个人中心可以通过官网跳转,不需要被浏…

双目视觉实战--单视图测量方法

目录 一.简介 二、2D变换 1. 等距变换(欧式变换) 2. 相似变换 3. 仿射变换 4. 射影变换(透视变换) 5. 结论 三、影消点与影消线 1. 平面上的线 2. 直线的交点 3. 2D无穷远点 4. 无穷远直线 5. 无穷远点的透视变换与仿…

【01】LVGL-CodeBlock模拟器安装 | LVGL工程下载 | PC端模拟LVGL步骤

LVGL模拟器 1.LVGL模拟器介绍2.Windows环境搭建CodeBlock及获取LVGL工程3.PC端模拟LVGL4.总结 1.LVGL模拟器介绍 LVGL模拟器:使用PC端软件模拟LVGL运行,而不需要任何嵌入式硬件。优点:便于学习、跨平台协同开发 2.Windows环境搭建CodeBlock及…

【Python、Qt】使用QItemDelegate实现单元格的富文本显示+复选框功能

[2023-10-19]代码已更新,完善了单元格宽度不足时省略号的显示问题。 [2023-10-18]代码已更新,追加单元格的文本对齐功能(使用成员函数QStandardItem.setTextAlignment设置单元格的Align。 主打一个 折磨 坑多 陪伴。代码为Python,C的就自己逐…

Python万圣节蝙蝠

目录 系列文章 前言 蝙蝠 程序设计 程序分析 运行结果 尾声 系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want5…

云务器迁移(腾讯云>华为云)

自己平时除了写些bug外还喜欢玩玩服务器,这不前几年买了一个域名,当时服务器买的是阿里云的,想着域名备案挺麻烦的就一直用着,只是在服务器到期后会重新购买其他运营商的(关键是续不起🤫) 这不最…

C/C++ 快速入门

参考:https://blog.csdn.net/gao_zhennan/article/details/128769439 1 下载Visual Studio Code并安装中文插件,此处不再叙述 2 插件安装C/C插件 3 使用快捷键【Ctr ~】打打开终端 验证并未安装编译器 4 我们即将使用【MinGW-64】做为编译器 https:…

程序环境和预处理

导言: 在编写代码的过程中,我们一般都是在一些图形化软件的编译器中实现,编译器帮我们实现了很多操作,这里就一些简单的过程进行说明。本文主要阐述了c语言程序的编译链接以及一些预处理知识,和宏定义的使用。 目录 …

IDEA提高工作效率的实用技巧

IDEA是一款备受开发者喜爱的集成开发环境,它提供了许多实用的功能,可以帮助我们更快速、更高效地编写代码。本文将介绍一些IDEA的使用技巧提高工作效率的实用技巧。 验证正则表达式 要验证编写的正则表达式是否正确,只需将光标放在要检查的…

MongoDB 未授权访问漏洞

简介 MongoDB是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,它的特点是高性能、易部署、易使用,存储数据非常方便,默认情况下是没有认证的这就导致不熟悉它的研发人员部署后没有做访问控制导致…

C++项目实战——基于多设计模式下的同步异步日志系统-⑩-异步缓冲区类与异步工作器类设计

文章目录 专栏导读异步缓冲区设计思想异步缓冲区类设计异步工作器类设计异步日志器设计异步缓冲区类整理异步工作器类整理 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿…

LeetCode算法栈—有效的括号

目录 有效的括号 用到的数据结构: 位运算、Map 和 Stack Stack 常用的函数: 题解: 代码: 运行结果; 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符…

模拟IIC通讯协议(stm32)(硬件iic后面在补)

一、IIC基础知识总结。 1、IIC通讯需要两条线就可以,SCL、SDA。 2、IIC的数据传输的速率,不同的ic是不同的,根据电平维持的延时函数的时间来确定IIC数据传输的速率. 3、IIC的延时函数可以使用延时函数,延时函数一般使用系统滴答时…

20款VS Code实用插件推荐

前言: VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

Fast DDS之Subscriber

目录 SubscriberSubscriberQosSubscriberListener创建Subscriber DataReaderSampleInfo读取数据 Subscriber扮演容器的角色,里面可以有很多DataReaders,它们使用Subscriber的同一份SubscriberQos配置。Subscriber可以承载不同Topic和数据类型的DataReade…

【QT】QTreeWidget

新建项目 第一步:设置头标签 第二步:设置item 第三步:创建子item,挂载在顶层item下 完整代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::W…

C++项目——云备份-①-项目介绍环境搭建

文章目录 专栏导读1.什么是云备份2.实现目标3.服务端程序负责功能4.服务端功能模块划分5.客户端程序负责功能6.客户端功能模块划分开发环境环境搭建1. gcc 升级7.3版本2.安装 jsoncpp 库3.下载bundle数据压缩库4.下载 httplib 库 专栏导读 🌸作者简介:花…