【Spring】SpringBoot对接WebSocket
SpringBoot都是绿色的
## 前言
由于网上各式各样的 WebSocket 代码都太旧了,前端后端代码的坑又特别多,所以总结了一套自己常用的 WebSocket 代码,这个代码仅针对单体应用
背景前端需要与后端建立一个长连接,用于传递新用户订阅的通知,并实时发送给前端的所有用户。传统的代码能用,但却面临以下痛点:
如何校验连接的安全性
如何防止连接断开
对于 如何校验连接的安全性 ,网上许多拆东墙补西墙的方法,是在 URL 做手脚,也就是将 token 以 ws://xx.xx.xx.xx:8080/application/{userId}?token={token} 这样的形式发送给后端,后端通过获取请求行中的内容,得到 token,再进行验证操作。
但有一天我通过 goaccess 分析 Nginx 日志,一下子就看到了许多用户的 ws 请求,上面的 token 写的可真是一清二楚,这对于生产环境来说,太危险了,如果有人得到了这份日志,就可以匿名做任何事情。
如果不在 URL 做手脚,但 WebSocket 又不支持请求体 ...
Leopold's Proust Questionnaire @2022
普鲁斯特问卷(Proust Questionnaire)由一系列问题组成,问题包括被提问者的生活、思想、价值观及人生经验等。因著作《追忆逝水年华》而闻名的马塞尔·普鲁斯特(Marcel Proust)并不是这份问卷的发明者,但这份问卷因为他特别的答案而出名,并在当年时髦的巴黎人沙龙中颇为流行。因此后人将这份问卷命名为“Proust Questionnaire”。P.S. 所有问题摘自 https://thewritepractice.com/proust-questionnaire/_
1. What is your idea of perfect happiness? (你认为最完美的快乐是怎样的?)
Leopold : 一个人安静的汲取知识、看待世界。
2. What is your greatest fear? (你最恐惧的是什么?)
Leopold : 我一事无成,宛如机器生活。
3. What is the trait you most deplore in yourself? (你自己的哪个特点让你感到痛恨?)
Leopold : t o o l a z y
...
【大数据】Elastic + canal + kibana 安装文档
版本信息
CORE
VERSION
PORT
ORDER
OTHER
Elasticsearch
7.13.3
9200 9300
1
搜索引擎
Kibana
7.13.3
5601
2
数据可视化
Canal-Admin
1.1.15
8489 11110(Admin) 11111(tcp) 11112(metric)
3
Canal管理页面
Canal-Server
1.1.15
4
Canal数据同步,MySQL同步ES(1.1.16版本有bug,回调至低版本)
Prometheus
2.37.0
9090
5
采集
Grafana
9.0.4
3000
6
可视化
Node_exporter
1.3.1
9100
7
系统监控采集
P.S. 服务器为Linux,本文涉及到的ip地址请自行根据个人情况更改,所有组件部署全为单机部署,大部分为服务方式启动,本文仅简单记录部署过程,仅供参考,切勿完全照搬。
准备工作必备组件1yum -y install nano tar net-tools
JDK需要大于等于1.8版本
123 ...
【数据库】MySQL性能优化详解
一只小海豚
# 索引的常见类型
底层哈希表哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。如果计算后的哈希值相同,则以链表的形式存在。
但由于哈希表并不是顺序存储,因此哈希索引做区间查询的速度是很慢的,它更适用于等值查询,比如 Memcached 及其他一些 NoSQL 引擎。
有序数组有序数组在等值查询和范围查询场景中的性能就都非常优秀,但是,在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。所以,有序数组索引只适用于静态存储引擎。
二叉搜索树二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。二叉树是搜索效率最高的,但是实际上大多数的数据库存储却并不使用二叉树。其原因是,索引不止存在内存中,还要写到磁盘上。
你可以想象一下一棵 100 万节点的平衡二叉树,树高 20。一次查询可能需要访问 20 个数据块。在机械硬盘时代, ...
【Java】Java分库分表实战之ShardingSphere
这个图标让我想起了火狐
## Java分库分表
概念对于分库分表的概念,建议查看这篇文章:[00 如何正确学习一款分库分表开源框架?.md (lianglianglee.com)](https://learn.lianglianglee.com/专栏/ShardingSphere 核心原理精讲-完/00 如何正确学习一款分库分表开源框架?.md),这篇文章大致讲述了分库分表的起源、原因以及各种解决方案。
本文主要讲述如何使用 ShardingSphere ,通过Java代码来分库分表,对于该组件的详细说明请参考概览 :: ShardingSphere (apache.org)。
引入Maven1234567891011121314151617<properties> <sharding-sphere.version>4.1.1</sharding-sphere.version> <shardingsphere.version>5.1.0</shardingsphere.version></propert ...
【博客】TinyPNG搭配GitHub Action实现自动压缩图床
起因在使用Typora搭配PicGo自动上传图片至GitHub图床时,图片是未被压缩的,导致博客在GitHub图床上获取图片的时间很长。因此想通过TinyPNG无损压缩图片,并通过GitHub Action自动压缩并替换原图,从而实现自动压缩并上传图片的功能。
项目地址 :https://github.com/leopold7/Learn_Tinify_Image_Action
步骤申请 Tinify API key申请地址:https://tinypng.com/developers
在你的邮箱中点击链接登录后,选择 Add API key,即可生成。
请记住此token
申请 GitHub Token在GItHub中点击头像,选择 Settings
选择Developer settings
选择 Personal access tokens -> Generate new token
按照下图勾选即可
请记住此token
配置yaml在GitHub项目中创建GitHub Action 所需的yaml配置文件,路径为 /.github/workflows/,文件名为 ...
【VPS】V2-ui转X-ui的升级与配置
前言自从在腾讯轻量云搭载V2-ui以来,稳定使用后就没再有过改动,由于最近入手了xbox,需要使用加速器,想到自身环境有利,便着手于对现有环境进行改造,发现V2-ui已经替换为X-ui。本文主要记录升级替换过程中遇到的问题,以及在nginx上的一些操作。
背景旧版使用的V2-ui采用HTTP域名访问的方式,共用443端口后,通过nginx进行分发到面板端口和地址。
系统采用的是CentOS。
开始更新及安装组件12yum update -y #CentOS 命令yum install -y curl #CentOS 命令
升级 X-ui1bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
启动 X-ui1x-ui
V2-ui ~ X-ui 数据迁移1x-ui v2-ui
仅迁移帐号,面板设置和用户名密码不会迁移。
停止V2-ui123456789101112131415161718192021222324252627282930[root@ ...
【Java】2021年Java对接APP支付宝API笔记
在图标的设计上,微信和支付宝都选择超出背景部分。
## 前言
由于工作需求,需要添加统一支付功能,微信已经有人对接过,因此我主要负责对接支付宝,本文主要记录Java对接支付宝的步骤,以及服务改造。
支付宝API文档确保支付所需的证书和参数正确下,我第一步选择查看官方API文档:https://opendocs.alipay.com/apis
由于项目是APP项目,且只涉及到支付与退款,因此我选择查看 alipay.trade.app.pay(app支付接口2.0) 和 alipay.trade.refund(统一收单交易退款接口)。
APP支付的含义是:外部商户APP唤起快捷SDK创建订单并支付。因此,我们得知,是APP通过阿里SDK调起支付宝,对于后端而言,我们只需要生成 符合规则的订单串 给前端,由前端唤起即可。
在查看支付宝官方的请求示例后,我并没有直接动手按照请求示例的代码开始编写测试,而是选择先Google下 ,有没有更好的服务端SDK供我们使用,果不其然,我发现了支付宝官方升级版SDK, Alipay Easy SDK:https://github.com/ali ...
【数据库】MongoDB 基础详解
Mongo的图标是一片🍃
***
简介MongoDB是一个开源、高性能、无模式(不像列级)的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库。
它支持的数据结构非常松散,是一种类似于 JSON 的格式叫 BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。
MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
SQL术语/概念
MongoDB术语/概念
解释/说明
database
database
数据库
table
collection
数据库表/集合
row
document
数据记录行/文档
column
field
数据字段/域
index
index
索引
table joins
表连接 MongoDB不支持
嵌入文档
Mo ...
Leopold's Proust Questionnaire @2020
普鲁斯特问卷(Proust Questionnaire)由一系列问题组成,问题包括被提问者的生活、思想、价值观及人生经验等。因著作《追忆逝水年华》而闻名的马塞尔·普鲁斯特(Marcel Proust)并不是这份问卷的发明者,但这份问卷因为他特别的答案而出名,并在当年时髦的巴黎人沙龙中颇为流行。因此后人将这份问卷命名为“Proust Questionnaire”。P.S. 所有问题摘自 https://thewritepractice.com/proust-questionnaire/_
1. What is your idea of perfect happiness? (你认为最完美的快乐是怎样的?)
Leopold : 一切以丰富自身及纯粹的快乐,有遗憾但不后悔。
2. What is your greatest fear? (你最恐惧的是什么?)
Leopold : 规矩时不规矩,自由时不自由。
3. What is the trait you most deplore in yourself? (你自己的哪个特点让你感到痛恨?)
Leopold : 面对爱人/亲人 ...