苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能

news/2025/3/31 3:01:58/

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.ppmy.cn/news/1156216.html

相关文章

LeetCode Python List 类型

在使用 Python3 语言解答 LeetCode 题目时,预先写好的函数头中, 经常看到 List, 注意是大写的 L。例如经典的 two-sum 一题: class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:如果粘贴如上代码到 VSCode&…

连接mysql报错 :Host ‘xxx.xx.x.x‘ is not allowed to connect to this MySQL server

排查思路 命令行连接mysql 我是安装在本地docker容器中的,可以使用一下命令直接连接 docker exec -it mysqldb mysql -u root -p其中mysqldb是我的mysql容器名字,后面跟随mysql的连接命令,然后输入密码即可。 如果没有设置过密码&#xff0c…

AN基础工具——填色工具

【AN基础工具——填色工具】 基本使用方法填色补充给色块周围画上线 变色动画渐变变色的蜥蜴 本篇内容:填色动画制作 重点内容:填色工具 工 具:Adobe Animate 2022 基本使用方法 填色补充 之前说图形要封闭才能填色,实际情况是有…

2023年10月16日-10月22日,(光追+ue+osg继续按部就班进行即可。)

根据月计划, 本周计划如下: 2023年10月16日-10月22日,光追10.7-10.13,ue rpg(p47-p53),ue5底层渲染01A19-01B4,osg29,osg30,filament文档每天看 落实到天就是 2023年10月16日光追10.7,ue rpg(p47),ue5底层渲染01A19,o…

PHP家教系统平台源码/请家教兼职家教网源码/自适应手机端/实测

源码简介: PHP家教系统平台源码/请家教兼职家教网源码/自适应实测,它支持兼职家教和请家教两种模式。该程序提供了完整的功能,包括家教信息发布、家教需求发布、信息匹配、在线支付等。此外,该程序还可以自适应手机端&#xff0c…

Ceph分布式存储的简单介绍与Ceph集群的部署搭建

文章目录 1. 存储的概述1.1 单机存储设备1.1.1 DAS(直接附加存储)1.1.2 NAS(网络附加存储)1.1.3 SAN(存储区域网络) 1.2 单机存储的缺陷1.3 分布式存储(软件定义的存储 SDS)1.4 分布…

高压放大器在软体机器人领域的应用

软体机器人是一种新型机器人技术,与传统的硬体机器人有着很大的不同。软体机器人通常由柔软的材料制成,具有高度的柔韧性和灵活性,并且可以实现多种形状和动作。但是,软体机器人的发展面临很多技术挑战,其中之一就是控…

【计算机网络笔记】分组交换 vs 电路交换

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 系列文章目录 以一个具体的场景为例:N个用户共享这个1M bps链路。假设每一个用户活动时需要的链路带宽是100kb/s&#…