• 【苍穹外卖 | 项目日记】第八天


    前言:

            昨天晚上跑完步回来宿舍都快停电了,就没写项目日记,今天补上

    目录

    前言:

    今日完结任务:

    今日收获:

    引入百度地图接口:

    引入spring task ,定时处理异常订单:

    引入websocket实现用户端催单和商家端的来单提醒:

    杂项知识点:

    总结:


    今日完结任务:

    • 对用户订单进行优化,引入了百度地图接口,增加了配送范围的判断
    • 引入了spring task ,定时处理异常订单(异常未付款和异常未派送)
    • 引入了websocket,实现了用户端的催单功能和商家端的来单提醒功能

    今日收获:

    引入百度地图接口:

    这个功能的思想很简单,就是提前存储商家位置,百度地图接口会根据该地址得到准确的经纬度,之后在用户点单的时候,再得到用户提供地址的经纬度,进行计算,判断距离是否超过限定值,如果超过则在后端抛出地址异常。这个唯一的缺点就是前端并没有给出相对应接收后端消息的代码,因此异常只会在后端被抛出,前端会卡顿

    引入spring task ,定时处理异常订单:

    这个功能确实很实用和常见,我们在日常生活中也经常遇见:CSDN的每周小结。这就是通过定时任务做的,而这个依赖很小,小到连自己的实体都没有,它属于是spring context中的一个附属依赖 

    1. <dependency>
    2. <groupId>org.springframeworkgroupId>
    3. <artifactId>spring-contextartifactId>
    4. <version>版本号version>
    5. dependency>

    而设置定时任务的基本代码设计很简单

    设置定时

    ----------------------------------------------------

    代码体

    我们使用@Scheduled来设置定时,在括号里我们采用的是cron表达式,他从左到右分别为:秒 分 时 天 周 月 

    而我们也不需要独立掌握cron表达式的书写,这种东西网上一大堆的转换器,这里我随便贴一个

    在线Cron表达式生成器 (qqe2.com)

    引入定时任务使得我们后端可以自动对异常订单进行处理,简化了我们的操作。但是需要注意定时任务虽然很好用,但是在设置定时的时候,还是不要太频繁,因为我们这里的定时任务中包括了对数据库的查询,就好比我贴出来的代码,他对用户超过15分钟的未付款超时订单进行处理,如果我们设置一秒一次,虽然可以,但是大量查询数据库会造成性能问题,因此定时任务的核心在于:如何高效率的设置任务

    此外使用定时任务还需要在代码入口使用@EnableScheduling来开启spring task

    引入websocket实现用户端催单和商家端的来单提醒:

    websocket本质上和我们之前介绍的http一样,本质上还是一种通信协议,他和http的区别主要在于:websocket使得服务端有了能力向客户端推送数据。在我们http协议中,采用的是请求-响应的模式。

    HTTP介绍:一文了解什么是HTTP_我是一盘牛肉的博客-CSDN博客

    关于websocket的详细介绍我们放到杂项知识点中,现在我们先只谈它在本项目中的使用

    应用场景为:当用户端下单之后,服务端需要接收消息返回给商家端,当用户催单的时候,也是如此

    这里的核心问题就在于:如何使得服务端可以返回消息给前端。

    其实我们可以发现:像这种后端发送数据的技术,我们之前还学过HttpCline这项技术

    HttpClient广泛用于客户端与服务器之间的请求-响应通信,通常使用在HTTP API的调用、数据获取等场景。WebSocket适用于实时应用程序,如聊天应用、实时数据监控、多人协同编辑等场景,它可以实现实时双向通信。

    并且httpCline是无状态协议,如果使用它来向前端返送数据,就要不断的连接-断开-连接。而websocket是长连接,这样就大大提高了效率。

    这里简单的展示了用户下单之后利用websocket来对商家端进行提醒。

    而他也需要一个注册类来注册一个websocket

    并且需要我们前端设置接收器来接收后端发送的json类型的数据。

    结果展示:
      

    并且附带语音提示。

    我没有写过聊天室,但是我感觉是否用户与商家的聊天也是这个思路,基于websocket,用户发送消息到服务器,服务器再使用websocket来转发给商家,商家给用户发送消息也是同样操作。

    杂项知识点:

    1.什么是websocket:

    WebSocket是一种在客户端和服务器之间实现全双工通信的协议。它通过在客户端和服务器之间建立一个长久的连接,并且允许客户端和服务器之间实时地进行双向通信。

    与传统的HTTP请求-响应模式不同,WebSocket允许服务器主动向客户端推送数据,而不需要客户端发送请求。这种实时通信的特性使得WebSocket在实时应用程序和实时数据传输方面非常有用。

    WebSocket协议通过HTTP协议进行初始握手过程,然后转换为WebSocket连接。它使用了自定义的二进制或文本消息格式,可以在连接建立后直接发送和接收消息。通常使用ws://或wss://作为WebSocket连接的URL前缀。

    WebSocket的优势包括:

    1. 实时性:WebSocket提供了实时双向通信的能力,允许服务器主动向客户端推送数据,实现实时的消息传输和更新。

    2. 效率和性能:WebSocket协议相比于HTTP请求,具有更低的开销和更高的性能,因为它避免了重复的请求头和无效的响应。

    3. 跨域支持:WebSocket能够轻松处理跨域请求,因为它是一种单一源的通信协议,主要受到服务器的限制。

    4. 广泛的浏览器支持:现代浏览器几乎都支持WebSocket协议,并且提供了一些用于创建WebSocket连接和处理消息的JavaScript API。

    WebSocket在各种领域都有广泛的应用,包括在线聊天、实时数据监控、多人游戏、协同编辑等。它为开发

    总结:

            今天的收获还算不错,学习了spring task和 websocket这两个比较常用的知识点。

    如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

    69e9169c980f43e0aad31ff9ada88a9c.png

     

  • 相关阅读:
    ant design vue treeDefaultExpandAll 更换数据后没有自动展开
    2022微信小程序:解决消除button的默认样式后容器任然在中间的位置的方案
    网络安全等级保护测评师定义以及主要工作任务是什么?
    Hadoop学习记录5--YARN学习1
    监控 -- linux中的一些系统性能状态指令、Prometheus
    聚合查询、联合查询【mysql数据库】
    【业务安全-02】业务数据安全测试及商品订购数量篡改实例
    力扣:第 304 场周赛
    纵向分栏
    Open3D(C++)欧式聚类分割
  • 原文地址:https://blog.csdn.net/fckbb/article/details/133970216