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

前言:

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

【苍穹外卖 | 项目日记】第八天_第1张图片

目录

前言:

今日完结任务:

今日收获:

引入百度地图接口:

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

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

杂项知识点:

总结:


今日完结任务:

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

今日收获:

引入百度地图接口:

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

【苍穹外卖 | 项目日记】第八天_第2张图片

【苍穹外卖 | 项目日记】第八天_第3张图片

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

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


    org.springframework
    spring-context
    版本号

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

设置定时

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

代码体

【苍穹外卖 | 项目日记】第八天_第4张图片

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

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

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

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

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

【苍穹外卖 | 项目日记】第八天_第5张图片

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

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

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

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

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

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

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

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

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

【苍穹外卖 | 项目日记】第八天_第6张图片

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

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

【苍穹外卖 | 项目日记】第八天_第7张图片

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

结果展示:
【苍穹外卖 | 项目日记】第八天_第8张图片  

并且附带语音提示。

我没有写过聊天室,但是我感觉是否用户与商家的聊天也是这个思路,基于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

 

你可能感兴趣的:(【苍穹外卖】,dubbo,学习,java,开发语言,spring,数据库)