当前位置: 首页 > news >正文

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

前言:

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

目录

前言:

今日完结任务:

今日收获:

引入百度地图接口:

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

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

杂项知识点:

总结:


今日完结任务:

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

今日收获:

引入百度地图接口:

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

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

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

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>版本号</version>
</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

 

相关文章:

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

前言&#xff1a; 昨天晚上跑完步回来宿舍都快停电了&#xff0c;就没写项目日记&#xff0c;今天补上 目录 前言&#xff1a; 今日完结任务&#xff1a; 今日收获&#xff1a; 引入百度地图接口&#xff1a; 引入spring task &#xff0c;定时处理异常订单&#xff1a; …...

概念解析 | 毫米波雷达与计算机视觉的融合

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:毫米波雷达与计算机视觉的融合。 毫米波雷达与计算机视觉的融合 Sensors | Free Full-Text | MmWave Radar and Vision Fusion for Object Detection in Autonomous Driving: A …...

嵌入式硬件中常见的100种硬件选型方式

1请列举您知道的电阻、电容、电感品牌&#xff08;最好包括国内、国外品牌&#xff09;。 电阻&#xff1a; 美国&#xff1a;AVX、VISHAY 威世 日本&#xff1a;KOA 兴亚、Kyocera 京瓷、muRata 村田、Panasonic 松下、ROHM 罗姆、susumu、TDK 台湾&#xff1a;LIZ 丽智、PHY…...

Kubernetes 通过 Deployment 部署Jupyterlab

概要 在Kubernetes上部署jupyterlab服务&#xff0c;链接Kubernetes集群内的MySQL&#xff0c;实现简单的数据开发功能。 前置条件 镜像准备&#xff1a;自定义Docker镜像--Jupyterlab-CSDN博客 MySQL-Statefulset准备&#xff1a;StatefulSet 简单实践 Kubernetes-CSDN博客…...

【Linux常用命令15】shell脚本

shell概述&#xff1a;shell是一个命令行解释器&#xff0c;它接收应用程序或用户的命令&#xff0c;然后调用操作系统内核 Linux Shell 种类非常多&#xff0c; 常见的有&#xff1a; Bourne Shell (/usr/bin/sh 或/bin/sh)、 Bourne Again Shell (/bin/bash)、 C Shell (/us…...

LTE系统TDD无线帧结构特点

LTE系统TDD无线帧结构的特点主要表现在以下几个方面&#xff1a; 无线帧结构时间描述的最小单位是采样周期Ts。在LTE中&#xff0c;每个子载波为2048阶IFFT采样&#xff0c;△f15kHz&#xff0c;因此采样周期Ts1/(204815000)0.033us。 TDD的帧结构包括两个5ms的半帧&#xff0…...

微信小程序OA会议系统数据交互

前言 经过我们所写的上一文章&#xff1a;微信小程序会议OA系统其他页面-CSDN博客 在我们的是基础面板上面&#xff0c;可以看到出来我们的数据是死数据&#xff0c;今天我们就完善我们的是数据 后台 在我们去完成项目之前我们要把我们的项目后台准备好资源我放在我资源中&…...

TypeScript环境安装

一、windows环境 安装node&#xff0c;附带自动安装npm工具 安装tsc npm install -g typescript 对于不支持 Nuget 的项目类型&#xff0c;你可以使用 TypeScript Visual Studio 扩展。 你可以使用 Visual Studio 中的 Extensions > Manage Extensions 安装扩展。 安装下…...

连接Mumu模拟器使用ADB

要连接Mumu模拟器使用ADB&#xff0c;您可以按照以下详细步骤进行操作&#xff1a; 安装ADB驱动程序&#xff1a;在您的计算机上安装ADB驱动程序。ADB是Android Debug Bridge的缩写&#xff0c;它允许您与Android设备进行通信。您可以从Android开发者网站&#xff08;https://d…...

springboot缓存篇之mybatis一级缓存和二级缓存

前言 相信很多人都用过mybatis&#xff0c;这篇文章主要是介绍mybatis的缓存&#xff0c;了解一下mybatis缓存是如何实现&#xff0c;以及它在实际中的应用 一级缓存 什么是mybatis一级缓存&#xff1f;我们先看一个例子&#xff1a; GetMapping("/list") public…...

云计算认证有哪些?认证考了有什么用?

云计算作为一项快速发展的技术&#xff0c;对人才的需求持续增长。无论是男生还是女生&#xff0c;只要具备相关的技能和知识&#xff0c;都可以在云计算领域找到就业机会。 目前入行云计算最好最便捷的方式就是考证&#xff0c;拿到一个云计算相关的证书&#xff0c;就能开启…...

[ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …...

c语言练习91:合并两个有序链表

合并两个有序链表 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码1&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct Li…...

【Qt控件之QTabBar】介绍及使用

概述 QTabBar类提供了一个选项卡栏&#xff0c;例如用于选项卡对话框。 QTabBar非常简单易用&#xff0c;它使用预定义的形状绘制选项卡&#xff0c;并在选择选项卡时发出信号。它可以被子类化以调整外观和感觉。Qt还提供了一个实现好的QTabWidget。 每个选项卡具有一个tabT…...

最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下&#xff0c;MacOSX只能实现对NTFS的读取功能&#xff0c;Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2023完美兼容最新版本的MacOS 11 Big Sur&#xff0c;在M1芯片…...

AndroidX使用Paho MQTT报找不到android/support/v4/content/LocalBroadcastManager

网上有直接引用support-v4包的&#xff0c;但我用的AndroidX&#xff0c;不能为这个类再引用support-v4 直接自己创建这个类&#xff0c;把androidx.localbroadcastmanager.content.LocalBroadcastManager改改就行。 虽然奇葩但能解决问题 package android.support.v4.content…...

Filter与Listener(过滤器与监听器)

1.Filter 1.过滤器概述 过滤器——Filter&#xff0c;它是JavaWeb三大组件之一。另外两个是Servlet和Listener 它可以对web应用中的所有资源进行拦截&#xff0c;并且在拦截之后进行一些特殊的操作 在程序中访问服务器资源时&#xff0c;当一个请求到来&#xff0c;服务器首…...

【刷题篇】反转链表

文章目录 一、206.反转链表二、92.反转链表 ||三、25. K 个一组翻转链表 一、206.反转链表 class Solution { public://使用头插//三个指针也可以ListNode* reverseList(ListNode* head) {if(headnullptr)return nullptr;ListNode* curhead;ListNode* newheadnew ListNode(0);L…...

【C语言小游戏--猜数字】

文章目录 前言1.游戏描述2.代码实现2.1打印菜单2.2构建基础框架2.3玩游戏2.3.1生成随机数2.3.1.1rand()2.3.1.2srand()2.3.1.3time() 2.3.2game() 2.4自己设定猜的次数 3.完整代码 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏&#xff0c;下…...

Vue计算属性computed和监听watch

1.计算属性 初衷&#xff1a;为了解决模块里面有太多的计算逻辑让模版难以维护。 计算属性可以依赖一个数据也可以依赖多个数据的变化 使用场景&#xff1a; 商品单价和数量改变时&#xff0c;商品总价更改。如果写在方法里面&#xff0c;那么每次修改商品单价和数量时都会…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...