2024年9月

大家好,我是
晓凡。

不少程序员小伙伴都喜欢边听音乐边敲代码,尤其在一个嘈杂的环境中,一个好的想法、好的思路可能就因为一瞬间的干扰就没了。

这时,如果耳机一戴上,听着音乐能更好的集中注意力;遇到bug也能临危不乱,想出更好的解决办法;

网易云音乐,算是一个相对简洁、有趣的播放器了。

不过近些年,各种花里胡哨的功能越来越多,有些歌曲的版权也没了,可谓是让人又爱又恨。

前几天逛
GitHub
的时候发现了一个【高颜值的第三方网易云播放器
YesPlayMusic
】推荐给大家。

YesPlayMusic

一、YesPlayMusic的魅力

YesPlayMusic
并不是简单的“换肤”软件,它基于网易云音乐的
API
,使用
Vue.js
全家桶开发。

实现了网易云音乐的全部核心功能,并且去除了那些你可能根本不会用到的繁琐功能。

也没有社交功能,简简单单,干干净净,专注于听歌。

作者自称灵感来源
Apple Music

YouTube Music

Spotify

网易云音乐

所以
YesPlayMusic
可谓光靠其高颜值的界面设计,成功俘获了一大批用户的心。

目前在
GitHub

stars
已经有
28.9k
⭐了

界面简洁而不失优雅,功能全面而不显臃肿,对于喜欢简洁的程序员来说可谓是一个不错的选择

GitHub地址

GitHub
地址在这儿:
https://github.com/qier222/YesPlayMusic

二、YesPlayMusic功能

麻雀虽小,但五脏俱全。该有不该有的功能都有,但不臃肿。

一些无用功能直接拿掉,作者还根据不同设备,不同地区做了各种适配。

可以使用网易云音乐账号登录,并将网易云音乐收藏同步过来。

下面这些功能够你用了么。

image-20240908102713709

三、下载安装

作者考虑周全,做了各种操作系统、各种设备的适配。并且发布了
Electron 版本
,使其在
macOS

Windows

Linux
都得到了适配。

有些小伙伴可能不知道
Electron
是啥?

其实我们平常使用的
Visual Studio Code

网易云音乐

飞书

xmind
等等都是通过
Electron
开发的,这下不陌生了吧。

简单来说
Electron
就是通过网页技术(
HTML

CSS

JavaScript
)来快速开发跨平台桌面应用的工具。

这么在不同平台上安装呢?

  • macOS
    用户可以通过
    Homebrew
    来安装:
    brew install --cask yesplaymusic
  • Windows
    用户可以通过
    Scoop
    来安装:
    scoop install extras/yesplaymusic

晓凡用的
Windows
操作系统,下面就以
windows
为例,简单说下这么下载安装。

① 跳转到Releases页面

目前最新版本是
v0.4.8
版本

https://github.com/qier222/YesPlayMusic/releases

image-20240908104710282

② 选择windows的exe下载即可

image-20240908104828964

如果在 Release 页面没有找到适合你的设备的安装包的话,你可以根据下面的步骤来打包自己的客户端。

  1. 打包 Electron 需要用到
    Node.js

    Yarn
    。可前往 Node.js 官网:
    https://nodejs.org/zh-cn/
    下载安装包。

    安装
    Node.js
    后可在终端里执行
    npm install -g yarn
    来安装 Yarn。

  2. 使用
    git clone --recursive https://github.com/qier222/YesPlayMusic.git
    克隆本仓库到本地。

  3. 使用
    yarn install
    安装项目依赖。

  4. 复制
    /.env.example
    文件为
    /.env

  5. 选择下列表格的命令来打包适合的你的安装包,打包出来的文件在
    /dist_electron
    目录下。了解更多信息可访问
    electron-builder 文档

命令 说明
yarn electron:build --windows nsis:ia32 Windows 32 位
yarn electron:build --windows nsis:arm64 Windows ARM
yarn electron:build --linux deb:armv7l Debian armv7l(树莓派等)
yarn electron:build --macos dir:arm64 macOS ARM

下面是晓凡安装后打开的一些截图

首页

发现页面

歌曲搜索

mv播放

四、本地部署

除了下载安装包使用,小伙伴们还可以将本项目部署到
Vercel
或自己服务器上。

作者在项目首页一共提供了①
Vercel
部署 ② 自己服务器部署 ③
Docker
部署 ④
Replit
部署 四种部署方式

至于怎么部署,作者在
GitHub
上已经说得很详细了。

给出的每种部署方式步骤都很详细,由于文章篇幅愿意,这里就不一一列举了。

感兴趣的小伙伴自己到
https://github.com/qier222/YesPlayMusic
查看即可

五、开发新功能

如果上面的功能还不能满足你,可以在此基础上继续进行二开

克隆项目到本地,运行本项目

# 安装依赖
yarn install

# 创建本地环境变量
cp .env.example .env

# 运行(网页端)
yarn serve

# 运行(electron)
yarn electron:serve

本期内容到这儿就结束了
★,°
:.☆( ̄▽ ̄)/$:
.°★

希望对您有所帮助

我们下期再见 ヾ(•ω•`)o (●'◡'●)

在开始介绍上周热门开源项目之前,要插播一条开源新闻:Nginx 已正式迁移至 GitHub。

近日,Nginx 官方宣布将 Nginx 开源项目,从 Mercurial 迁移至 GitHub 代码托管平台,并开始接受 PR 形式的贡献、Issues 问题反馈和功能请求等,GitHub 上的 Nginx 项目终于“活”了!

GitHub 地址→
github.com/nginx/nginx

说回上周的热门开源项目,有一个项目着实让我开眼了:用纯 SQL 编写的俄罗斯方块游戏 Tetris-SQL,游戏的逻辑和画面都是由 SQL 实现,核心 SQL 文件仅 500 多行代码,项目内包含了实现细节和讲解。震惊之余,来点实用的开发工具压压惊,全平台通用的换源工具 chsrc、轻量级的 IP 扫描工具 WatchYourLAN 和跨发行版的 Linux 工具箱 linutil,它们都是能解决某个痛点的开发工具。

当然,怎么能少了有趣、好玩的开源项目呢?开源的字修仙游戏 vue-XiuXianGame 和空中交通管制在线模拟器 openscope,它们不仅有趣,更是点开就能玩。

  • 本文目录
    • 1. 热门开源项目
      • 1.1 用 SQL 写的俄罗斯方块游戏:Tetris-SQL
      • 1.2 轻量级的 IP 扫描工具:WatchYourLAN
      • 1.3 跨发行版的 Linux 工具箱:linutil
      • 1.4 在线的空中交通管制模拟器:openscope
      • 1.5 干净可定制的 RAG WebUI:kotaemon
    • 2. HelloGitHub 热评
      • 2.1 开源的文字修仙游戏:vue-XiuXianGame
      • 2.2 全平台通用的换源工具:chsrc
    • 3. 结尾

1. 热门开源项目

1.1 用 SQL 写的俄罗斯方块游戏:Tetris-SQL

主语言:PLpgSQL

Star:400

周增长:400

该项目是仅用 SQL 代码实现的俄罗斯方块游戏,展示了 SQL 语言的强大能力(图灵完备)。它通过 PostgreSQL 数据库中的表和查询语句来控制游戏逻辑和显示。虽然项目包含 Python 脚本,但只是用于将用户输入转化为 SQL 命令。同时,项目还提供了开箱即用的安装方式和详细的实现细节讲解,除了有趣之外,还可以作为实战项目,帮助解释高级 SQL 概念并加深对 SQL 的理解。

GitHub 地址→
github.com/nuno-faria/tetris-sql

1.2 轻量级的 IP 扫描工具:WatchYourLAN

主语言:Go

Star:3.3k

周增长:1.2k

这是一个自带 Web 界面的 IP 扫描工具,可作为轻量级的监控平台。它可以扫描本地/公共网络中的 IP 和端口,帮助用户实时监控主机的在线和离线状态,并记录历史数据。当检测到新设备时,它还能发出通知,让运维人员快速了解当前网络中的变化,从而更方便地维护和追踪网络设备状态。

GitHub 地址→
github.com/aceberg/WatchYourLAN

1.3 跨发行版的 Linux 工具箱:linutil

主语言:Rust

Star:1.4k

周增长:700

该项目是专为 Linux 设计的命令行工具,旨在简化日常 Linux 任务。它使用 Rust 语言开发命令行界面,提供了一系列常用的自动化脚本和命令,兼容多个 Linux 发行版,功能包括软件安装、系统优化和安全配置(防火墙)等方面。

GitHub 地址→
github.com/ChrisTitusTech/linutil

1.4 在线的空中交通管制模拟器:openscope

主语言:JavaScript

Star:600

这是一个用 JavaScript 开发的多人空中交通管制模拟器,可模拟真实的空中交通环境和管理。它提供了直观的雷达和地图视图,支持模拟飞机的起飞、降落、飞行路径规划和空中交通流量管理,以及天气、紧急情况、不同飞机和机场环境等复杂场景。

GitHub 地址→
github.com/openscope/openscope

1.5 干净可定制的 RAG WebUI:kotaemon

主语言:Python

Star:11k

周增长:5k

该项目可以快速构建一个简洁、易于定制、拥有 Web 界面的 RAG 应用,让用户通过聊天的方式与本地文档交互。它不仅使用方便且功能丰富,支持多用户、文档预览、多模态交互,以及嵌入 LLM API 和本地 LLMs 等功能。

GitHub 地址→
github.com/Cinnamon/kotaemon

2. HelloGitHub 热评

在本章节中,我们将为大家介绍本周 HelloGitHub 网站上的热门开源项目。同时,期待您与我们分享使用这些开源项目的心得与体验。

2.1 开源的文字修仙游戏:vue-XiuXianGame

主语言:Vue

这是一个基于 Vue.js 开发的修仙模拟器,互动式的文字游戏,适合喜欢放置类和修仙题材游戏的玩家。

项目详情→
hellogithub.com/repository/e73a691ffcfa4d0e92a05912fe8c0b46

2.2 全平台通用的换源工具:chsrc

主语言:C

该项目能够为常见的 Linux 发行版、编程语言和软件切换至国内镜像源,操作简单仅需一条命令。它采用 C 语言编写,具有高效和轻量级的特点,支持测速、多平台以及项目级换源等功能,适用于优化下载速度或解决源受限的场景。

项目详情→
hellogithub.com/repository/7666ba91e01e4a59be5809b02d9e8ff6

3. 结尾

以上就是本期「GitHub 热点速览」的全部内容,希望你能够在这里找到自己感兴趣的开源项目,如果你有其他好玩、有趣的 GitHub 开源项目想要分享,欢迎来
HelloGitHub
与我们交流和讨论。

往期回顾

大家好,我是欧阳。今年刚好是欧阳三十而立之年,虽然没有立起来。这篇文章来聊聊我从一名
军工厂电气工程师

某知名互联网公司程序员
,这期间我
吃饭的家伙
都有哪些。

军工厂期间

欧阳大学读的是“电气工程及其自动化专业”,毕业后进入了老家的一个军工厂,成为了一名
电气工程师
。军工厂的位置是在一个镇上,和
“繁华”
这两个字一点都不沾边,如果想自己做饭下午都买不到菜的那种。

2016年还算是互联网的红利期,360行,行行都在转互联网。受到这个风气的影响欧阳在军工厂也呆不住了,想到外面
繁华的世界
看看。

所以欧阳斥巨资,在淘宝买了一份2块钱的黑马前端培训班视频。当时我手里只有大学家里买的一台3千块钱的笔记本,这也是我
第一个吃饭的家伙

first

2元培训班视频
+
3千块钱电脑
(安装WebStorm都卡),几个月后让我成功的入门前端,并且找到了第一份前端工作。

第一份前端工作

从军工厂进入互联网企业后工资也涨了,所以就开始
喜新厌旧
了。开始嫌弃老伙计写代码卡、打游戏也卡、反正哪里都卡。所以咬咬牙,花了一个月的工资买了一台
7k
左右的电脑,也就是我
第二个吃饭的家伙

second

知名互联网公司

由于第一家公司涨薪太慢,1年多后欧阳就跳槽了。进了一家某
央企
成立的互联网公司,半年后某知名互联网公司将我们整个团队都挖了过去。

在这期间我发现对于前端工程师来说单屏有点不够用,需要一边写代码,一边看页面效果。这样就不需要将页面切来切去了,所以后面我又花了几百块钱买了一个便宜显示器,这是我
第三个吃饭的家伙

third

后来发现团队里面的大佬都在用
Mac Book Pro
,欧阳虽然不算大佬,但是也拥有成为大佬的心。当时想的是,必须要和大佬拥有一样的设备,所以咬咬牙买了一台
M1 Pro
。这是我
第四个吃饭的家伙
,一直服役到现在。
four

显示器

以前用Windows电脑搭配外接显示器时还不觉得有什么问题,因为两个清晰度都不高,没有对比就没有伤害。换了MBP后,由于Mac超级清晰的显示器,画页面时一边看Mac屏幕,一边看外接显示器的屏幕,简直就是
一个天上一个地下

晚上经常要熬夜,但是老婆又要睡觉。为了家庭和谐,所以欧阳经常在关灯的情况下继续coding。但是我的那个便宜显示器在夜晚看着特别刺眼,让我本就接近500度的眼睛雪上加霜。

还有就是外接显示器屏幕横向宽度是够了,但是纵向高度太矮了。看见上面的代码,就看不见下面的代码,对于一个记忆力逐渐开始下降的中年男人来说真的很不友好。

毫无疑问,欧阳又喜新厌旧了,决定把那个便宜显示器换掉。有了上一次的教训,这次欧阳决定一步到位。

为什么会说是教训呢?因为上次换的那个7k的windows电脑属于不上不下,二手卖掉又太亏,和Mac比起来又差太远,只能闲置在家里。有时在后悔当初为什么不一步到位直接换个Mac,非要浪费这钱。

经过多方比较,以及找了一些专业的朋友推荐后,最后入手了这款明基的显示器,型号是
明基RD280U
,这就是我
第五个吃饭的家伙

为什么欧阳会选择这款显示器呢?

因为他是
全球首款为程序员设计的显示器
,完美的解决了我的所有痛点。

首先就是他的清晰度非常高,清晰度和我的Mac自带的显示器屏幕差不多了。

除了清晰度之外他还有一个编码模式,开启这个模式后代码看着就更加清晰,也不反光和模糊了。

这个是明基显示器:
compare

这个是以前便宜显示器:
third

还有就是这款显示器自带两种编码模式,分别是
编码-深色主题

编码-亮色主题
。更牛逼的是这两种模式可以对vscode或者webstorm自带的
深色
或者
亮色
主题在色彩这一块进行增强,所以代码的语法高亮效果更清晰了。

并且还支持自定义调节对应的参数,这样我就可以在白天和晚上分别使用两种不同的主题。深色主题完美的解决了我夜晚coding的问题,拯救了我可怜的眼睛。
theme

更洋气的是他还支持背光灯,夜晚coding的时候真的超级安逸。灯光也支持调节
调节亮度、色温、灯光模式

light

上面这张图是我夜晚关灯时拍的照片。

最后就是这个横纵比是
3:2

28寸
屏幕是真的超级大,我算了一下同样的代码比我
16:9
的显示器能够多看10行代码。
这个只能看到315行代码:
small

这个能够看到325行代码:
big

还有就是学习日语的时候用他真的超级享受,又大又清晰,比Mac屏幕还爽。

除此之外这款显示器还有一些其他的功能,比如上下左右调节、猫头鹰模式(根据环境自动调节屏幕亮度)、搭配软件可以设置键盘快捷键操作屏幕的硬件功能(超级牛逼)、配置编程触摸键、个性化快捷键。

总结

到今年工作8年了,这个显示器是欧阳所有
吃饭的家伙
里面最满意的。为什么说
Mac电脑
不是最满意的呢?因为他真的太贵了,和显示器比起来性价比就差不少了。

liwen01 2024.09.08

前言

经过二十多年的发展,WiFi 在硬件能力、软件和算法、频谱资源、市场需求、电源与能效方面都有了很大的提升。所以我们能看到从最开始只有几 M 速率的 802.11b,发展到现在几十 G 速率的 WiFi6,WiFi7。

前面我们介绍了 802.11 b/g/n 的一些核心技术和基础概念,本章将介绍目前比较新的 WiFi5 和 WiFi6,以及在今年会发布的 WiFi7。

图片

  • WiFi4 (802.11n,2009)
    :首次引入 MIMO 和 40 MHz 频宽,基础的高效无线网络标准。
  • WiFi5 (802.11ac,2013)
    :更高数据速率,专注于 5 GHz 频段,适合高清流媒体和在线游戏。
  • WiFi6 (802.11ax,2019)
    :更高效率,适合密集设备环境,支持更低的延迟和更高的节能表现。
  • WiFi7 (802.11be,2024)
    :预计今年(2024)会发布的新一代标准,提供超高数据速率,支持更高带宽需求。

我们先回顾一下上一章已介绍过的 WiFi4,后面介绍的 WiFi5、WiFi6、WiFi7 实际也是从 WiFi4 基础上迭代发展出来的,它们也都支持向下兼容。

本章涉及到比较多之前已介绍过的知识,这里只进行概括描述,详细介绍可以参考前面文章:


wifi基础(一):无线电波与WIFI信号干扰、衰减


WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n

(一) 802.11n (WiFi4)

图片

(1) OFDM

OFDM (Orthogonal Frequency-Division Multiplexing)
正交频分复用调制技术,将信号分成多个窄带子载波,每个子载波独立调制。子载波之间是相互正交的,避免了相互干扰。

优点:

  1. 抗多径干扰能力强,特别适用于室内无线环境。
  2. 频谱效率高,能够在有限频谱内传输更高的数据速率。

缺点:

  1. 对频率偏移和相位噪声敏感。
  2. 实现较为复杂,需要精确的同步。

(2) FEC

FEC (Forward Error Correction)
前向纠错技术,在数据传输过程中增加冗余信息,以便在接收端进行错误检测和修正,从而提高数据传输的可靠性。

优点:

  1. 提高数据传输的可靠性,降低重传率。
  2. 提高了在信道质量较差情况下的通信质量。

缺点:

  1. 增加了数据包的长度和编码复杂度。
  2. 导致带宽开销增加。

(3) MIMO

MIMO (Multiple Input Multiple Output)
技术通过在发送端和接收端使用多个天线来同时传输和接收多路数据流,从而显著提高数据传输速率和网络覆盖范围。

优点:

  1. 大幅提高了数据传输速率 (通过空间复用)。
  2. 增强了信号覆盖范围和信道容量。

缺点:

  1. 实现成本较高,需要额外的硬件支持 (如多天线)。
  2. 天线之间的相互干扰可能会降低性能。

(4) Short GI

Short GI (Short Guard Interval)
是指将 OFDM 符号之间的保护间隔 (Guard Interval) 从标准的 800ns 缩短为 400ns。保护间隔用于减少符号间干扰。

优点:
缩短保护间隔可以提高数据传输速率 (提高约 11%)。

缺点:
短保护间隔在多径效应严重的环境中可能会导致符号间干扰,反而降低性能。

(5) 40 MHz 频宽

802.11n 支持将两个 20 MHz 的频段合并为一个 40 MHz 的频段,从而提高数据传输带宽和速率。

优点:
通过增大频宽,数据传输速率可以翻倍。

缺点:

  1. 在 2.4 GHz 频段上,40 MHz 频宽容易导致与其他设备 (如蓝牙设备、微波炉)发生干扰,特别是在频谱资源紧张的环境中。
  2. 可能影响其他使用相邻频段的无线设备的正常工作。

通过这些技术,802.11n 在实际应用中达到了比之前标准更高的吞吐量和更稳定的连接,但也面临着复杂性增加和部分场景中干扰增加的问题。

(6) WiFi4 最大速率

数据子载波数 x 每个符号传输比特数 x 载波编码率 x 符号速率 x MIMO = 最大理论速率

108 * 6bit * 5/6 * 277.778 ksps *4 = 600Mbps

(二) 802.11ac(WiFi5)

图片

WiFi5 只支持 5GHz 频段,与 WiFi4 相比,有一个大的突破是使用了 MU-MIMO 技术。

(1) MU - MIMO 技术

(a) MIMO 基本原理

MIMO 通过使用多个天线在发送端和接收端同时发送和接收多路数据流,来增加数据传输速率和信号覆盖范围。

在传统的单用户 MIMO (SU-MIMO)中,一次只能为一个设备 (用户)提供多路数据流,所有的天线资源只服务于一个设备。

(b) MU-MIMO 的原理

MU-MIMO (Multi-User Multiple Input Multiple Output)
是 MIMO 的多用户版本,它允许路由器 (AP) 使用多个天线同时向多个设备 (用户) 传输数据。这种方式显著提高了网络的并发能力和频谱利用效率。

(c) 如何工作

  • 多个数据流
    :MU-MIMO 能够同时向多个设备发送不同的数据流,而不是像 SU-MIMO 那样一次只能向一个设备发送数据流。

  • 分配天线资源
    :MU-MIMO 技术根据设备的需求和信道状态,动态地分配天线资源,使得多个设备可以同时利用无线带宽。

  • 空间分集
    :利用空间分集技术,MU-MIMO 可以区分和识别空间中不同用户设备的信号,避免相互干扰。

(d) 优点

提高效率
:MU-MIMO 能够同时为多个设备提供数据服务,避免了设备之间的竞争,减少了空闲时间和通信延迟,尤其在高密度设备环境下 (如家庭、办公场所、公共场所)表现尤为明显。

增加吞吐量
:通过多设备同时传输,MU-MIMO 提高了总体的网络吞吐量,使得更多设备能够获得稳定的高数据速率。

改善用户体验
:减少了由于设备增多而导致的网络拥堵问题,特别是在多设备同时进行高带宽需求操作 (如视频流、在线游戏)时效果显著。

(e) 限制和挑战

设备支持:
MU-MIMO 需要路由器和客户端设备 (如手机、平板、笔记本电脑)同时支持该技术
。如果客户端不支持 MU-MIMO,无法受益于该技术。

物理限制
:MU-MIMO 的性能受限于设备的天线数量、天线间隔、以及环境的多径效应。一般家庭路由器可能只能同时支持2-4个设备的MU-MIMO。

复杂度
:由于需要同时管理多个用户的数据流,MU-MIMO 技术的实现复杂度较高,尤其是在动态环境中,信道状态会随时变化,需要更复杂的算法来维持高效传输。

(f) 与 SU-MIMO 的比较

SU-MIMO
:一次只能为一个用户提供多路数据流,适合单个设备高速传输。

MU-MIMO:
能够同时为多个用户提供多路数据流,更加高效地利用无线资源,适合多设备并发环境。

图片

WiFi5 Wave2 因为使用了 MU-MIMO, 实现了 WiFi 从 1 对 1 的传输,跨越到 1 对多的传输,但是这里需要注意,
在WiFi5 Wave2 中,只支持下行方向的 MU-MIMO 。

(2) 802.11Wave1 速率计算

Wave1 与 WiFi 相比,使用了 256-QAM 编码,也就是每个符号可以传输 8bit 数。信道绑定由原来的 40MHz,现在提升到了 80MHz,数据子载波数提升到了 234 个。

数据子载波数 x 每个符号传输比特数 x 载波编码率 x 符号速率 x MIMO = 最大理论速率

234 * 8bit * 5/6 * 277.778 ksps *3 = 1300Mbps

(3) 802.11Wave2 速率计算

Wave 2 可以最大支持 160MHz 的带宽,数据子载波的数量有 468 个,空间流由 wave1 的 3 个提升到了 4 个。

数据子载波数 x 每个符号传输比特数 x 载波编码率 x 符号速率 x MIMO = 最大理论速率

468 * 8bit * 5/6 * 277.778 ksps *4 = 3466.67Mbps

图片

在最新的一些资料上看,WiFi5 wave1 可以支持到 3.47Gbps, wave2 可以支持到最大速率 6.9Gbps。主要是支持的空间流数的增加和信道带宽的增加。

最大速率是需要 AP 和 STA 都要支持对应的标准协议,并且有对应的硬件支持(比如天线个数),如果 AP 有多天线且运行 802.11ac 协议,但 STA 只支持 802.11n,并且只有单天线,那最大也就只能支持一个空间流,实际最大速率与理论最大速率之间会有很大的差异。

(4)  802.11 Wave2 跨信道绑定

图片

我们看到 802.11ac Wave2 中,提供的信道有一个 80+80 的信道,它表示可以将不相邻的两个 80MHz 信道进行聚合绑定,使信道频宽变得更宽更灵活。该技术也应用到了后面更新的 WiFi6 和 WiFi7 标准中。

(三) 802.11ax (WiFi6)

WiFi6 是现在正在逐渐推广的一个标准,它同时支持 2.4GHz 和 5GHz 频段。与 WiFi4 和 WiFi5 相比,WiFi6 的关键技术有:
1024QAM、OFDMA多址,上下行MU-MIMO,空间复用、TWT 技术

图片

(1) OFDMA多址技术

OFDMA (Orthogonal Frequency Division Multiple Access 正交频分多址)
用于将无线信道划分为多个子信道 (也称为子载波),每个子信道可以被不同的用户同时使用。

这种技术在4G LTE 网络中已经广泛应用,现在也被引入到了 WiFi 中,以提高网络效率。

(a) OFDMA的工作原理:

信道划分:
在OFDMA中,整个 WiFi 信道被划分为多个较窄的子信道 (子载波),每个子载波可以携带一部分数据。

用户分配:
不同的用户可以同时使用这些子载波进行通信。例如,一个用户可以使用某些子载波,而另一个用户可以使用其他子载波,这样可以在同一时刻支持多个用户进行数据传输。

提高效率:
通过允许多个用户共享同一信道,OFDMA 减少了信道的闲置时间,并提高了频谱利用率。这对于高密度环境 (如体育场、会议室等) 尤为重要,因为它能显著减少用户之间的干扰和竞争。

(b) OFDMA的优势

低延迟:
OFDMA 减少了用户之间的竞争,因此可以降低网络延迟,特别是在高流量环境下。

高效频谱利用:
通过灵活地分配子载波,OFDMA 能够更高效地利用频谱资源,避免信道资源的浪费。

更好的服务质量 (QoS):
OFDMA 允许网络根据需求分配资源,从而可以为不同的应用提供更好的服务质量,如流媒体、视频会议等。

支持更多用户:
OFDMA 使得 802.11ax 能够支持更多的并发用户,而不会显著降低每个用户的带宽。

(2) 空间复用

空间复用 (Spatial Reuse)
是利用空间分隔来增加同一频谱资源使用效率的技术。具体而言,它允许多个设备在同一时间内通过同一信道进行通信,只要这些设备之间的物理距离足够远,不会相互干扰。

(a) 空间复用的工作原理

(I) BSS Coloring:

BSS (基本服务集)
:在 WiFi 网络中,每个接入点 (AP)及其关联的设备形成一个BSS。传统 WiFi 网络中,如果相邻的 BSS 使用相同的信道,它们之间的信号会相互干扰,导致设备不得不等待信道空闲。

BSS Coloring
:WiFi6 通过引入BSS Coloring (BSS上色)技术来区分相邻的 BSS。每个 BSS 可以被赋予一个“颜色”,以帮助设备识别信号是否来自同一 BSS 。如果信号来自不同的 BSS 且干扰较小,设备仍然可以传输数据,从而实现空间复用。

(II) 目标信噪比 (SNR)调整:

传统的 WiFi 网络中,设备会通过检测信道上的能量水平来决定是否可以发送数据。如果检测到某个信号能量超过一定阈值,就认为信道被占用。

在 WiFi6 中,通过调节信噪比阈值,允许设备在感知到相对较弱的干扰信号时继续传输数据。这种调整使得空间复用变得更加有效。

(III) 灵活的频谱使用:

WiFi6 允许更灵活的频谱使用,能够根据当前的网络环境动态调整。这意味着在同一信道上,多个 AP 可以更高效地分配资源,减少因相互干扰而导致的频谱浪费。

(b) 空间复用的优势

提高网络容量:
空间复用通过允许更多的设备同时在同一信道上进行通信,极大地提高了网络的总体容量。

减少等待时间:
由于设备可以更频繁地访问信道,因此可以减少数据传输的等待时间,提升整体网络效率。

优化高密度环境:
在用户设备密集的场景 (如大型会议、体育场等),空间复用能够显著减少干扰,提高每个用户的体验。

(3) TWT 目标唤醒时间技术

TWT (Target Wake Time)
允许设备与接入点 (AP) 之间协商唤醒时间,从而减少设备的电池消耗。TWT 是 WiFi 6 引入的一项重要创新技术,它在节能和网络效率方面具有显著的优势。

工作原理:

时间协商
:设备和 AP 协商一个 TWT 协议,确定设备何时可以进入休眠模式,以及何时需要唤醒以发送或接收数据。这个协商可以根据设备的使用模式、数据传输需求和电源管理策略进行定制。

节能
:通过 TWT,设备可以在不需要频繁通讯的情况下长时间保持休眠状态,仅在预定的时间唤醒以处理数据。这大大减少了设备的功耗,特别是对于电池供电的设备如手机、物联网设备和传感器等。

减少干扰
:TWT 还可以减少不同设备之间的信号干扰。因为设备在不同的时间段内唤醒和传输数据,多个设备不会在同一时间段争抢无线信道,从而提高了整体网络的效率。

TWT 的类型

TWT 可以分为以下两种类型:

单个TWT
:在这种模式下,设备和 AP 协商一个单独的唤醒时间表。例如,设备可能每隔一段时间唤醒一次,以发送或接收数据。

广播TWT
:在广播 TWT 模式下,AP 可以向多个设备发送一个统一的 TWT 调度表。这样多个设备可以在相同的时间段内唤醒,进行同步的数据传输。

TWT 的应用场景

物联网设备:
许多物联网设备需要长时间待机且偶尔传输少量数据,TWT 技术可以显著延长这些设备的电池寿命。

移动设备:
智能手机、平板等移动设备可以通过 TWT 在 WiFi连接期间节省电量,尤其是在后台数据传输较少的情况下。

(4) WiFi6 的优势

图片

WiFi6 与 WiFi5 相比,在
大带宽、高并发、低延时、低功耗
方面都有大幅度的提升。

大带宽
:WiFi6 可以支持到 160MHz 频宽的信道绑定,使用 1024-QAM 的编码,最大支持 8 路空间流,使 WiFi6 的理论最大速率达到了 9.6Gbps

高并发
:支持上下行 MU-MIMO 与上下行 OFDMA 两种多用户传输技术,减少多用户并行传输时的信道开销,提升多用户场景下的空间信道利用率,另外 WiFi6 每个 AP 支持 1024 个终端接入。

低延时
:通过 OFDMA 和 MU-MIMO 技术减少了设备之间的竞争时间,从而加快了数据传输速度。

低功耗
:通过 TWT 和 Beamforming(波束成形) 技术,减少设备唤醒次数和优化信号传输来降低 STA 设备端的功耗。

WiFi6 与移动通讯中的 5G 非常类似,正逐渐地被推广使用。

(四) 802.11be (WiFi7)

(1) WiFi7 的关键技术

(a) 更宽的信道带宽

320MHz带宽
:WiFi7 支持 320 MHz的超宽信道带宽,相较于 WiFi6 的最大 160 MHz,带宽翻倍。这种带宽的扩展使得数据传输速率大大提高。

信道聚合
:WiFi7 支持将多个非连续频段聚合为一个逻辑信道,从而进一步提高带宽利用率。

(b) 更高阶的调制技术

4096-QAM (4K-QAM)
:WiFi7 引入了更高阶的调制方式 4096-QAM,相比 WiFi6 的 1024-QAM,数据密度增加了 50%。这意味着在相同信道条件下,WiFi7 能够传输更多数据,从而提升整体吞吐量。

(c) 多链路操作 (Multi-Link Operation, MLO)

多链路聚合
:WiFi7 允许设备同时在多个频段 (例如2.4 GHz、5 GHz和6 GHz)上传输数据,最大化带宽利用率,并提高传输的稳定性和速度。

链路负载平衡
:MLO技术还能根据网络负载和干扰情况,动态选择最优链路进行数据传输,减少延迟和信道拥堵。

(d) 增强的 OFDMA 和 MU-MIMO

增强的 OFDMA (正交频分多址)
:WiFi7进一步优化了 OFDMA 技术,支持更多的子载波和更细粒度的频谱分配,从而提高多用户环境下的网络效率。

MU-MIMO (多用户多输入多输出)
:WiFi7 支持 32 个空间流 (相比 WiFi6 的 8 个),这意味着能够同时为更多设备提供高速连接,特别是在密集环境下。

(e) 极低延迟和时间敏感网络 (Time-Sensitive Networking, TSN)

低延迟传输
:WiFi7 通过改进的调度算法和更灵活的频谱管理,实现了极低的传输延迟,非常适合需要高实时性的数据传输场景,如 AR/VR 和工业自动化。

TSN 支持
:WiFi7 引入了时间敏感网络支持,能够在无线网络中提供类似于有线网络的时间敏感数据传输,确保关键任务数据的稳定传输。

(f) 改进的BSS Coloring技术

增强的BSS Coloring
:WiFi7 进一步改进了 BSS Coloring 技术,使其在高密度网络环境下更有效地减少干扰,并提高信道复用效率。

(2) WiFi7 的理论最大速率

通过上述技术的综合应用,WiFi7 的理论最大速率可以达到 46 Gbps,这是WiFi6最大速率的近5倍。这种速度提升主要得益于更宽的信道带宽 (320 MHz)、更高阶的调制 (4096-QAM) 和多链路操作 (MLO)等技术的结合。

(五) WiFi 依然面临的问题

虽然 WiFi 技术在不断地发展,但是需要面对的问题也会越来越多。多用户并发、视频媒体重度发展、新老标准协议并存、各式物联网设备对 WiFi 实时性、功耗的不同要求,等等。

(1) 信号干扰与拥堵:

随着无线设备的普及,WiFi 信号的干扰会更加明显,办公区、商场、会展中心等环境经常会遇到各种问题,比如:能搜到 WiFi 热点,但却连接不上,就算连接上了,网速也很慢。

WiFi 热点众多,楼上楼下周围邻居间相互干扰,新老设备运行不同协议标准,多用户同时并发,导致信号干扰和拥堵明显。

(2) 带宽限制与速率瓶颈:

视频媒体重度发展,对高带宽、低延迟有极大的需求。尽管新的 WiFi 标准 (如 WiFi6 和 WiFi7) 提供了更高的理论最大速率,但在现实环境中,带宽的限制和设备间的竞争仍然可能导致网络速度无法达到预期。

(3) 覆盖范围与信号衰减:

WiFi 信号的覆盖范围有限,尤其在有墙壁或其他障碍物的情况下,信号衰减显著,导致信号质量下降,需要通过增加路由器或使用中继器来扩展覆盖范围。

对于户外高温、雨淋等环境,对设备可靠性和稳定性要求又很高。

(4) 安全性问题:

虽然 WiFi 安全性不断提升 (例如 WPA3 标准) ,但仍然存在潜在的安全漏洞,如中间人攻击、密码破解等。此外,许多用户在安全配置上意识不足,也可能导致网络被未经授权的设备访问。

(5) 功耗与设备兼容性:

随着物联网设备的普及,WiFi 网络连接的设备类型和数量大幅增加。这些设备对功耗和兼容性的要求各不相同,可能导致网络效率降低或设备无法有效连接。

(6) 技术更新与过渡:

随着 WiFi 技术的快速发展,新旧标准的过渡带来了一定的兼容性问题。用户可能需要更新硬件设备才能完全利用新标准的优势,比如增加天线个数。

对于对成本敏感的物联网设备,它们奉行的原则大多都是够用就好,所以这个技术过渡期会比较漫长。

结尾

关于 802.11 WiFi 相关标准的简单介绍到这里就结束了,下一章我们将介绍 WiFi 的工作原理,以及 WiFi 的接入过程分析。

上面内容,如有错误,欢迎评论区提示指出,不胜感激。

------------------End------------------
如需获取更多内容
请关注 liwen01 公众号

开源地址

https://gitee.com/lboot/LLog

简介

LLog
是基于
AOP
构建的请求日志记录和查询工具库,通过引入该工具库,完成配置,实现对接口请求日志的记录、查询检索等功能。









准备

在引入任何
Lucy
系列依赖之前,需要完成
jitpack
镜像仓库的配置。

<repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://www.jitpack.io</url>
        </repository>
</repositories>

集成

引入


pom
中引入,版本号与
发行版本
一致。

<dependency>
        <groupId>com.gitee.lboot</groupId>
        <artifactId>LLog</artifactId>
        <version>0.0.8</version>
</dependency>

配置

1. 白名单配置

LLog
日志管理页面访问,默认仅支持
127.0.0.1
的请求来源访问(即支持本地访问),如果需要支持更多的访问来源,需要配置放行
IP
列表,通过
,
分隔。

# 日志请求白名单
llog.ip.allows=127.0.0.1,198.0.0.1

2. 数据库配置

LLog
基于
lucy-jpa
构建数据库访问,需要完成对应数据库配置。

# MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=demo
spring.datasource.password=
# JPA 允许结构替换
spring.main.allow-bean-definition-overriding=true
# 最小空闲连接数量
spring.datasource.hikari.minimum-idle=5
# 最长生命周期
spring.datasource.hikari.max-lifetime=120000
# 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=50000
# 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=20
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
# 连接测试查询
spring.datasource.hikari.connection-test-query=SELECT 1
# jpa 配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.database=MYSQL
#自动将驼峰命名转换为小写和下划线 userId -> user_id
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#不加这句则默认为myisam引擎
spring.jpa.database-platform= org.hibernate.dialect.MySQL5InnoDBDialect

3. 鉴权方案配置

LLog
会记录用户ID和请求IP。如果需要获取到用户ID,则需要完成对鉴权服务的配置,拓展实现
AuthService
中的
isLogin

getUid
接口,或者直接引入
lucy-rbac
等实现方案。

推荐自定义实现

@Slf4j
@Service
@AllArgsConstructor
public class DemoAuthServiceImpl implements AuthService {
    @Override
    public Boolean isLogin() {
        // return StpUtil.isLogin(); // 使用 SaToken 
        return AuthService.super.isLogin();
    }

    @Override
    public String getUid() {
        // return StpUtil.getLoginIdAsString(); // 使用 SaToken 
        return null;
    }
}

使用

@ApiLog

通过自定义注解标记需要记录请求日志的接口,实现对接口请求的自动记录。

@ApiLog("追踪测试")
@GetMapping("trace")
@ApiOperation(value = "追踪ID测试")
public ResponseDTO<Object> testTrace(){
    //
}

@ApiLog
注解可配置项如下:

参数 类型 备注
value string 默认为请求所属模块名词
module string value 别名
ignoreResponse int 记录数据是否忽略响应结果,1为是,0为否
ignoreRequest int 记录数据是否忽略请求参数,1为是,0为否

管理面板

通过访问项目部署地址,进入日志查看管理页面。

http://localhost:8080/dashboard.html

支持多种条件的日志检索方式。

功能截图

1. 异常堆栈

2. 请求 & 响应数据

鼠标悬浮即可查看

3. 条件查询

条件组合查询

例如此处就是
状态
+
接口方法
组合查询,支持全部条件的组合。

关键词匹配检索

请求来源和请求参数都支持模糊查询匹配,
支持条件查询与模糊查询组合使用

更新日志

0.0.8

  • [特性] 更新了
    lucy-spring-boot-starter
    版本依赖
  • [新增] 支持了按照请求参数模糊匹配的功能
  • [修复] 修复了重置页码不变化的bug

更多...

技术支持

kindear@foxmail.com