获得徽章 0
- 了解 PAKE(Password-Based Authenticated Key Establishment Protocol) 的协议协商加解密的密钥。中文叫做 口令认证密钥交换协议。
downloads.bouncycastle.org
www.cnblogs.com
展开1点赞 - 评论点赞
- 我的 Vue3 采用 Vite 构建。先在 windows host 文件中自定义域名映射 127.0.0.1 local.robot.com,然后在 Nginx 中配置:
server {
listen 80;
server_name local.robot.com;
location / { # 前端 UI
proxy_pass http://localhost:5173/; # 代理到后端 API
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
以便访问 Vite 运行的开发 web 服务器(npm run dev 执行),同时配置了 vite.config.ts 中的 server.allowedHosts为'local.robot.com',这样我就可以在浏览器通过local.robot.com观察开发的页面,但是浏览器控制台报错:client? [sm]:745 WebSocket connection to 'ws://local.robot.com/?token=y1DST1Dtv4XL' failed: [vite] Direct websocket connection fallback.
方案:
你需要在 Nginx 配置中添加一个专门处理 WebSocket 连接的 location 块。
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}展开评论点赞 - Java 延时任务
通俗地讲,一个定时器就搞定。但实际来说要考虑的问题很多,例如线程安全、并发之类的。
# 时间轮算法实现
1996 年 George Varghese 和 Tony Lauck 的论文《Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility》中提出了一种时间轮管理 Timeout 事件的方式。其设计非常巧妙,并且类似时钟的运行,如下图的原始时间轮有 8 个格子,假定指针经过每个格子花费时间是 1 个时间单位,当前指针指向 0,一个 17 个时间单位后超时的任务则需要运转 2 圈再通过一个格子后被执行,放在相同格子的任务会形成一个链表。
相比 DelayQueue 的数据结构,时间轮在算法复杂度上有一定优势,但用时间轮来实现延时任务同样避免不了单点故障。
# 参考
- [如何实现延迟任务,这11种方式才算优雅!](www.cnblogs.com)
- [JAVA中延时任务的几种实现方式 ](ost.51cto.com)
- [延迟任务的实现总结](www.cnblogs.com)
- [Java延时订单处理(上)- - 抛砖引玉](blog.csdn.net) DelayQueue,参考了这个
- [基于Redis实现DelayQueue延迟队列设计方案(附源码)](blog.csdn.net)
展开赞过评论1 - 当前 SqlMan 使用的 Spring 自带的表达式引擎 SpEl,功能各方面都不错,就是有个依赖的包袱:单纯看 SpEl 的模块 spring-expression 的话,大小是1.3MB左右。但是其还依赖了 spring-core 和 spring-jcl,再含这两个的话,大小 7.4MB左右。作为一个本身精巧的数据库工具却依赖那么大的家伙,好像有点说不过去。于是我考虑别的表达式引擎,也没啥轻量级的,连最熟悉的老朋友 JUEL(JSP 时代的表达式)都600kb~
juel.sourceforge.net
github.com 没办法,自己写吗?曾经写过 JSON 解析器,这难度应该不比 JSON 的大,只是比较耗费时间和脑力……(不错的选项文章:《Java表达式引擎选型调研分析》
developer.jdcloud.com)
展开赞过评论1