苍穹外卖day10(2)WebSocket、来单提醒、客户催单

文章目录

  • 前言
  • 一、WebSocket
    • [1. 概述](#1. 概述)
    • [2. HTTP协议和WebSocket协议对比](#2. HTTP协议和WebSocket协议对比)
    • [3. 实现步骤](#3. 实现步骤)
  • 二、来单提醒
    • [1. 业务规则](#1. 业务规则)
    • [2. 接口设计](#2. 接口设计)
    • [3. 代码实现](#3. 代码实现)
  • 三、客户催单
    • [1. 业务规则](#1. 业务规则)
    • [2. 接口设计](#2. 接口设计)
    • [3. 代码实现](#3. 代码实现)

前言

websocket支持双向通信,通常用于数据实时更新。本项目中用于来单提醒和客户催单,当用户支付成功时,系统会提示客户来单;在用户端,客户点击催单按钮,系统会提示客户催单。


一、WebSocket

1. 概述

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

视频弹幕

网页聊天

体育实况更新

股票基金报价实时更新

2. HTTP协议和WebSocket协议对比

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

WebSocket缺点

服务器长期维护长连接需要一定的成本

各个浏览器支持程度不一

WebSocket 是长连接,受网络限制比较大,需要处理好重连

结论:WebSocket并不能完全取代HTTP,它只适合在特定的场景下使用

3. 实现步骤

1、直接使用websocket.html页面作为WebSocket客户端

2、导入WebSocket的maven坐标

3、导入WebSocket服务端组件WebSocketServer,用于和客户端通信

4、导入配置类WebSocketConfiguration,注册WebSocket的服务端组件

5、导入定时任务类WebSocketTask,定时向客户端推送数据

二、来单提醒

1. 业务规则

用户下单并且支付成功后,需要第一时间通知外卖商家。通知的形式有如下两种:

  • 语音播报
  • 弹出提示框

2. 接口设计

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

3. 代码实现

1、在config包下设置WebSocketConfiguration配置类

java 复制代码
@Configuration
public class WebSocketConfiguration {
  @Bean
   public ServerEndpointExporter serverEndpointExporter() {
       return new ServerEndpointExporter();
   }
}

2、在OrderServiceImpl中注入WebSocketServer对象,修改paySuccess方法

java 复制代码
//注入 WebSocketServer
@Autowired
private WebSocketServer webSocketServer;
public void paySuccess(String outTradeNo) {
   ...
   //通过websocket向客户端浏览器推送消息 type orderId content
   Map map = new HashMap();
   map.put("type",1);  //1表示来单提醒 2表示客户催单
   map.put("orderId",ordersDB.getId());
   map.put("content","订单号:"+outTradeNo);
   String json = JSON.toJSONString(map);
   webSocketServer.sendToAllClient(json);
}

三、客户催单

1. 业务规则

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

  • 语音播报
  • 弹出提示框

2. 接口设计

和来单提醒一样,当用户点击催单按钮后,就会推送消息到管理端

3. 代码实现

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

java 复制代码
 @GetMapping("/reminder/{id}")
 @ApiOperation("催单提醒")
  public Result reminder(@PathVariable Long id){
      orderService.reminder(id);
      return Result.success();
 }

2、在OrderService接口中声明reminder方法,在OrderServiceImpl中实现

java 复制代码
public void reminder(Long id) {
    Orders ordersDB = orderMapper.getById(id);
    // 校验订单是否存在
    if (ordersDB == null) {
        throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
    }
    Map map = new HashMap();
    map.put("type",2);  //1表示来单提醒 2表示客户催单
    map.put("orderId",ordersDB.getId());
    map.put("content","订单号:"+ ordersDB.getNumber());
    String json = JSON.toJSONString(map);
    //通过websocket向客户端浏览器推送消息
    webSocketServer.sendToAllClient(json);
}
相关推荐
用户908324602732 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
用户8307196840823 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解3 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解3 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记3 天前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者4 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840824 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解4 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
YuMiao4 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
初次攀爬者5 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq