超詳細的 RustDesk 自建中繼節點教程

厭倦了商業遠程控制軟件的會員限制和功能閹割?渴望擁有一個自由掌控、安全可靠的遠程連接方案?開源軟件 RustDesk 正是你需要的答案!

相信從事互聯網工作的你,一定對向日葵和ToDesk等商業遠程控制軟件并不陌生。然而,受限于商業利益,它們往往對普通用戶不太友好,比如限制免費用戶的畫質和幀率,以此引導用戶開通會員。

今天,我們將向你介紹一款開源的遠程桌面軟件——RustDesk!它在 GitHub 上已收獲 74.6k 的 Star,并且開發社區活躍,版本迭代迅速。

由于 RustDesk 的官方中轉服務器位于國外,國內用戶使用時可能會遇到連接速度慢、延遲高等問題。為了獲得更流暢的體驗,我們可以選擇自建中轉服務器。

接下來,我將給大家提供一個詳細的自建 RustDesk 中轉服務器教程,助你打造屬于自己的高速、穩定、安全的遠程連接通道!

RustDesk 介紹

RustDesk 是一款開源、免費、高性能的遠程桌面軟件,它允許你通過互聯網或局域網遠程控制另一臺計算機。RustDesk 使用 Rust 語言編寫,注重安全性、速度和易用性,提供流暢、可靠的遠程桌面體驗。

與 TeamViewer 或 AnyDesk 等商業軟件不同,RustDesk 不依賴中心化的服務器,而是采用端到端加密技術,直接連接你的設備,確保你的隱私安全。你也可以選擇自建中繼服務器,進一步提升連接速度和穩定性,并完全掌控你的數據。

RustDesk 的主要特點

  • 開源免費: RustDesk 代碼完全開源,可以免費使用,沒有任何功能限制或隱藏收費。
  • 跨平臺支持: 支持 Windows、macOS、Linux、iOS、Android 等多個平臺,實現跨設備遠程控制。
  • 高性能和低延遲: 采用高效的編碼和傳輸協議,提供流暢的屏幕傳輸和低延遲的操作體驗。
  • 安全性高: 使用端到端加密技術,保護你的連接和數據安全,防止信息泄露。
  • 易于使用: 界面簡潔直觀,操作簡單易懂,即使是新手也能輕松上手。
  • 自建中繼服務器: 可以自行搭建中繼服務器,實現更快的連接速度和更高的穩定性。

RustDesk 架構

RustDesk 采用了經典的客戶端-服務器模型,其中涉及三個主要組件:RustDesk 客戶端、RustDesk 服務器和 ID Server。

  • RustDesk 客戶端: 運行在你的設備上(Windows,macOS,Linux,Android, iPhone)用于連接兩個設備的軟件。
  • RustDesk 中繼服務器(Relay Server): 運行在服務器上,充當客戶端之間的橋梁,轉發來自一方的數據包到另一方。在某些環境中(如經過 NAT 出網)設備之間無法進行 P2P 連接,可以用服務器來中轉。
  • ID 服務器(ID Server): 運行在服務器上,用于維護客戶端及中繼服務器的連接信息,促進設備之間建立 P2P 連接。

RustDesk架構圖

在 RustDesk 的服務器端部署中,hbbr 和 hbbs 是兩個重要的組件,分別用于不同的功能:

  • hbbs: 代表 RustDesk ID / Rendezvous Server,RustDesk ID 注冊服務器,用于分配和注冊 ID;hbbs 是 RustDesk 的中介服務器(Broker Server),用于管理和協調客戶端連接。它幫助客戶端找到并建立 P2P 連接。hbbs 負責維護客戶端的在線狀態,并處理連接請求。當客戶端 A 希望連接客戶端 B 時,它會向 hbbs 發送請求,hbbs 會幫助它們建立連接。
  • hbbr: 代表 RustDesk Relay Server,RustDesk 中繼服務器,如果 P2P 無法連接,會使用 hbbr 進行流量中繼。hbbr 是 RustDesk 的中繼服務器(Relay Server),用于在兩臺客戶端之間進行連接中繼。它允許無法直接建立 P2P 連接的客戶端通過中繼服務器進行通信。當客戶端 A 和客戶端 B 之間無法建立直接連接時,它們會通過 hbbr 中繼服務器進行數據傳輸。
  • rustdesk-utils: RustDesk 命令行工具

P2P 直連說明:

RustDesk 首先嘗試建立直接 P2P 連接,如果 P2P 失敗,將使用中繼服務器。

確認連接方式,首先連接到遠程主機,可以將鼠標移動到工具欄圖標(綠色圖標),將顯示它是直接連接還是通過中繼服務器連接。

使用端口說明:

序號服務端口協議用途是否可選
1hbbs21114TCP用于 Web 控制臺 API,僅在專業版中可用可選
2hbbs21115TCPNAT 類型測試必選
3hbbs21116TCP/UDPUDP 用于 ID 注冊和心跳服務,TCP 用于 TCP 打洞和連接服務必選
4hbbr21117TCP用于 Relay 服務必選
5hbbs21118TCP用于支持 Web 客戶端可選
6hbbr21119TCP用于支持 Web 客戶端可選

一般我們使用這些端口就好了:

  • TCP: 21115,21116,21117,21118,21119
  • UDP: 21116

準備工作

  • 準備一臺云服務器

若尚未擁有服務器,可前往 雨云官網 https://rainyun.ivwv.site 進行注冊,新用戶有專屬優惠。

開始部署中轉服務器

rustdesk-server 官方倉庫地址: https://github.com/rustdesk/rustdesk-server

部署方式

RustDesk 提供了多種部署方式,您可以根據自己的需求和技術水平選擇合適的方式,主要有以下三種方式:

  1. 使用 Docker / Docker Compose 部署(推薦,選其一): 這是最簡單、最快速的部署方式,適合大多數用戶。您只需要運行幾條 Docker 命令,即可完成 RustDesk 中轉服務器的安裝和配置。

  2. 使用 PM2 部署: PM2 是一個 Node.js 進程管理工具,可以幫助您方便地管理和維護 RustDesk 服務器進程。

  3. 使用二進制文件運行: 下載預編譯的二進制文件,解壓后即可運行,無需編譯安裝,適合快速部署和測試。

我會依次向大家介紹如何部署。

前提要求(重要)

在進行部署之前,請確保您的服務器滿足以下前提要求:

  • 一臺擁有公網 IP 的 Linux 服務器,例如騰訊云、阿里云等。
  • 服務器已開啟必要的端口:
    • TCP: 21115, 21116, 21117, 21118, 21119
    • UDP: 21116

你可以通過服務器管理面板的安全組或防火墻配置中放行這些端口。

使用 Docker 部署(推薦)

1. 安裝 Docker
如果您的服務器上還沒有安裝 Docker,請使用以下命令安裝:

# 使用清華源,如果是國外云服務器可以不運行這一步
export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
# 安裝命令
curl -fsSL https://get.docker.com/ | sh

檢查是否安裝完畢,如果有正確輸出版本 ,那么就代表安裝成功了。

root@ubuntu:~# docker -v
Docker version 27.1.1, build 6312585

運行命令

mkdir -p ~/rustdesk
cd ~/rustdesk
sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v ./data:/root -td --net=host rustdesk/rustdesk-server hbbs
sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v ./data:/root -td --net=host rustdesk/rustdesk-server hbbr

注意

如果你運行 docker 版本時候,要求注冊碼,說明你下載的是老版本,因為國內的 docker 鏡像緩存可能沒有更新

檢查是否正常運行

控制臺輸入 docker ps -a,查看STATUS 狀態是否是 Up

root@ubuntu:~/rustdesk# docker ps -a
CONTAINER ID   IMAGE                      COMMAND   CREATED          STATUS          PORTS     NAMES
97e8dfc8939e   rustdesk/rustdesk-server   "hbbr"    44 seconds ago   Up 43 seconds             hbbr
64e629c8a41d   rustdesk/rustdesk-server   "hbbs"    49 seconds ago   Up 48 seconds             hbbs

運行好后,可以在當前目錄下列出文件,輸入ls -l data

root@ubuntu:~/rustdesk# ls -l data
total 132
-rw-r--r-- 1 root root  4096 Oct 26 15:25 db_v2.sqlite3
-rw-r--r-- 1 root root 32768 Oct 26 15:25 db_v2.sqlite3-shm
-rw-r--r-- 1 root root 82432 Oct 26 15:25 db_v2.sqlite3-wal
-rw-r--r-- 1 root root    88 Oct 26 15:25 id_ed25519
-rw-r--r-- 1 root root    44 Oct 26 15:25 id_ed25519.pub

可以看到有5個文件,其中 id_ed25519.pub 文件內容接下來會使用到。

也可以嘗試使用Docker Compose 部署(可選)

mkdir -p ~/rustdesk
cd ~/rustdesk
vim docker-compose.yaml

將以下內容復制粘貼進去


networks:rustdesk-net:external: falseservices:hbbs:container_name: hbbsports:- 21115:21115- 21116:21116- 21116:21116/udpimage: rustdesk/rustdesk-servercommand: hbbsvolumes:- ./data:/root # 自定義掛載目錄networks:- rustdesk-netdepends_on:- hbbrrestart: unless-stoppeddeploy:resources:limits:memory: 64Mhbbr:container_name: hbbrports:- 21117:21117image: rustdesk/rustdesk-servercommand: hbbrvolumes:- ./data:/root # 自定義掛載目錄networks:- rustdesk-netrestart: unless-stoppeddeploy:resources:limits:memory: 64M

運行 Docker compose

docker compose up -d

同樣控制臺輸入 docker ps -a,查看STATUS 狀態是否是 Up

root@ubuntu:~/rustdesk# docker ps -a
CONTAINER ID   IMAGE                      COMMAND   CREATED          STATUS          PORTS     NAMES
97e8dfc8939e   rustdesk/rustdesk-server   "hbbr"    44 seconds ago   Up 43 seconds             hbbr
64e629c8a41d   rustdesk/rustdesk-server   "hbbs"    49 seconds ago   Up 48 seconds             hbbs

運行好后,也可以在當前目錄下列出文件,輸入ls -l data

root@ubuntu:~/rustdesk# ls -l data
total 132
-rw-r--r-- 1 root root  4096 Oct 26 15:25 db_v2.sqlite3
-rw-r--r-- 1 root root 32768 Oct 26 15:25 db_v2.sqlite3-shm
-rw-r--r-- 1 root root 82432 Oct 26 15:25 db_v2.sqlite3-wal
-rw-r--r-- 1 root root    88 Oct 26 15:25 id_ed25519
-rw-r--r-- 1 root root    44 Oct 26 15:25 id_ed25519.pub

可以看到有5個文件,其中 id_ed25519.pub 文件內容接下來會使用到。

到此位置,使用 Docker 的兩種方式都已經介紹完畢,客戶端的使用可以直接到下一個標題: 客戶端使用 查看,接下來我會介紹使用 PM2 部署

使用 PM2 部署(推薦)

首先,是需要一個 NodeJS 的環境

安裝 NodeJS 和 NPM

# 更新軟件包列表
sudo apt update# 安裝 Node.js 和 npm
sudo apt install nodejs npm -y# 驗證安裝是否成功
node -v
npm -v

安裝 PM2

npm i -g pm2
# 驗證安裝是否成功
pm2 -v

下載 rustdesk-server二進制文件

進入 Github - rustdesk-server - releases

Github-rustdesk-server-releases

找到自己服務器匹配的架構,一般市面上的云服務器都是amd64架構的,跟我一樣的命令即可

sudo apt update
sudo apt install curl unzip -y
mkdir -p ~/rustdesk
cd ~/rustdesk
curl -L "https://github.com/rustdesk/rustdesk-server/releases/download/1.1.12/rustdesk-server-linux-amd64.zip" -o "rustdesk-server-linux-amd64.zip"
unzip rustdesk-server-linux-amd64.zip
cd amd64
ls -l

運行完畢后且無誤后,會在終端列出三個二進制可執行文件,分別是:

  • hddr
  • hbbs
  • rustdesk-utils

接下來運行下列命令

pm2 start hbbs
pm2 start hbbr

運行好后,會看到 pm2 輸出的列表(也可以后續使用 pm2 list)

idnamenamespaceversionmodepiduptime?statuscpumemuserwatching
1hbbrdefaultN/Afork3294460s0online0%696.0kbrootdisabled
0hbbsdefaultN/Afork3294327s0online0%4.4mbrootdisabled

當看到 status 都是 online 時就表示啟動成功。 這里可以看到 cpumem,其實運行這兩個程序并不會使用太多的內存和 cpu 接下來查看運行后,會在當前目錄下創建什么文件

root@ubuntu:~/rustdesk/amd64# ls -l
total 27688
-rw-r--r-- 1 root root     4096 Oct 26 16:13 db_v2.sqlite3
-rw-r--r-- 1 root root    32768 Oct 26 16:13 db_v2.sqlite3-shm
-rw-r--r-- 1 root root    82432 Oct 26 16:13 db_v2.sqlite3-wal
-rwxr-xr-x 1 root root  9194392 Oct  7 16:37 hbbr
-rwxr-xr-x 1 root root 14290448 Oct  7 16:37 hbbs
-rw-r--r-- 1 root root       88 Oct 26 16:13 id_ed25519
-rw-r--r-- 1 root root       44 Oct 26 16:13 id_ed25519.pub
-rwxr-xr-x 1 root root  4734920 Oct  7 16:37 rustdesk-utils

可以看到,增加了5個文件,其中 id_ed25519.pub 后續客戶端使用的時候會用到。
到此位置,使用 pm2 的方式已經介紹完畢,客戶端的使用可以直接到下一個標題: 客戶端使用 查看,接下來我會介紹使用 使用二進制文件運行 部署。

使用二進制文件運行(不推薦)

這種方式為什么不推薦呢,稍后會提到。
與pm2方式一樣,需要下載 rustdesk-server二進制文件

進入 Github - rustdesk-server - releases

Github-rustdesk-server-releases

找到自己服務器匹配的架構,一般市面上的云服務器都是amd64架構的,跟我一樣的命令即可

sudo apt update
sudo apt install curl unzip -y
mkdir -p ~/rustdesk
cd ~/rustdesk
curl -L "https://github.com/rustdesk/rustdesk-server/releases/download/1.1.12/rustdesk-server-linux-amd64.zip" -o "rustdesk-server-linux-amd64.zip"
unzip rustdesk-server-linux-amd64.zip
cd amd64
ls -l

這里與 pm2 方式一樣,也會輸出同樣的文件
但是運行方式不一樣,由于時二進制文件,我們可以直接運行 hbbshbbr 文件
運行:

root@ubuntu:~/rustdesk/amd64# ./hbbs
[2024-10-26 16:47:14.908679 +08:00] INFO [src/common.rs:122] Private key comes from id_ed25519
[2024-10-26 16:47:14.908702 +08:00] INFO [src/rendezvous_server.rs:1205] Key: Ia42DxVS6hZ07cybqftPxAKXvszpbuj77aM=
[2024-10-26 16:47:14.908705 +08:00] INFO [src/peer.rs:84] DB_URL=./db_v2.sqlite3
[2024-10-26 16:47:14.909695 +08:00] INFO [src/rendezvous_server.rs:99] serial=0
[2024-10-26 16:47:14.909726 +08:00] INFO [src/common.rs:46] rendezvous-servers=[]
[2024-10-26 16:47:14.909730 +08:00] INFO [src/rendezvous_server.rs:101] Listening on tcp/udp :21116
[2024-10-26 16:47:14.909732 +08:00] INFO [src/rendezvous_server.rs:102] Listening on tcp :21115, extra port for NAT test
[2024-10-26 16:47:14.909734 +08:00] INFO [src/rendezvous_server.rs:103] Listening on websocket :21118
[2024-10-26 16:47:14.909762 +08:00] INFO [libs/hbb_common/src/udp.rs:36] Receive buf size of udp [::]:21116: Ok(212992)
[2024-10-26 16:47:14.909809 +08:00] INFO [src/rendezvous_server.rs:138] mask: None
[2024-10-26 16:47:14.909817 +08:00] INFO [src/rendezvous_server.rs:139] local-ip: ""
[2024-10-26 16:47:14.909822 +08:00] INFO [src/common.rs:46] relay-servers=[]
[2024-10-26 16:47:14.909870 +08:00] INFO [src/rendezvous_server.rs:153] ALWAYS_USE_RELAY=N
[2024-10-26 16:47:14.909898 +08:00] INFO [src/rendezvous_server.rs:185] Start
[2024-10-26 16:47:14.909929 +08:00] INFO [libs/hbb_common/src/udp.rs:36] Receive buf size of udp [::]:0: Ok(212992)

運行后發現,需要一直保持終端不斷開,所以這種方式并不推薦,因為這種方式需要同時打開兩個終端 ,一個終端運行 hbbr 另一個終端運行 hbbs 當終端結束后,服務也就停止了。

客戶端使用

我們進入 rustdesk官網:https://rustdesk.com/zh-cn/ 或者進入 Github-releases

由于rustdesk支持多個平臺的客戶端。

可以直接從這個表格點擊下載。

ArchitectureWindowsUbuntuMacAndroidFlatpakAppImageiOS
x86-64 (64-bit)EXE MSIDownloadDownloadUniversalDownloadDownload
AArch64 (ARM64)DownloadDownloadDownloadDownloadDownloadTestFlight
ARMv7 (32-bit)DownloadDownload
x86-32 (32-bit)Download

我這里以Windows為例,我的下載鏈接是: x86-64 (64-bit)。

下載完畢后,直接打開雙擊,同時在你的被控制端也需要下載安裝

安裝好打開界面如下:

rustdesk安裝后打開界面

可以看到底部 服務未運行 啟動服務

設置中繼服務器

點擊窗口右上角 三橫線 或 左側 ID 旁邊的 三個點 進入設置頁面。

再依次點擊: 網絡 -> 解鎖網絡設置

找到設置中級服務器位置

以下是四個輸入框的配置說明,具體配置可能會有所不同,取決于你的最初的設置,如果你使用docker方式時,更改了外部映射的端口,可以根據如下默認端口,填寫對應的外部端口。

ID 服務器(hbbs)

  • 默認端口:21116

中繼服務器(hbbr)

  • 默認端口:21117

API 服務器

  • 默認端口:21118

Key

  • 上面提到的 id_ed25519.pub 文件的內容
  • 使用 cat id_ed25519.pub 命令查看 Key
# 具體根據你該文件的目錄來
cd ~/rustdesk/data/
cat id_ed25519.pub# 我的輸出
Ia42DxVS6hZ07cybqftPxAKXvszpbuj77aM=

如果是默認rustdesk官方推薦的端口,那么只需要填寫你的服務器 IP 到 ID 服務器 輸入框即可,如圖:

默認方式輸入ID中繼服務器

如果使用docker方式有更改端口,可以按照如下默認端口,找到自己映射的外部端口

自定義端口模板

最后點擊應用即可。

特別需要注意的是,你需要在每一個客戶端都這樣設置好中繼服務器。

啟動服務

進入 設置 -> 常規

啟動客戶端服務

返回主頁查看底部狀態,如果是綠色圓圈,并且是 就緒兩字,就表示成功了 。

查看是否啟動成功

被控端

被控端也同樣設置好后,就可以看到 ID 和 密碼了,將其給到控制端輸入就可以了,跟向日葵和Todesk一樣的操作

被控端

控制端功能

成功遠程后,控制端可以有這些功能操作。

控制端功能

相關鏈接

我的博客:https://blog.ivwv.site
雨云官網:https://rainyun.ivwv.site

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90914.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 2整合Druid的兩種方式

一、自定義整合Druid&#xff08;非Starter方式&#xff09;適用于需要完全手動控制配置的場景添加依賴&#xff08;pom.xml&#xff09;<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</ve…

鴻蒙Next-開發版本升級,API升級(例如API12升API16)

鴻蒙更新換代很快的&#xff0c;2025年1月&#xff0c;截至4月就有 DevEco Studio 5.0.2 Release 升級到 DevEco Studio 5.0.3 Release 升級到 DevEco Studio 5.0.4 Release&#xff0c;三次大版本更新。 作者也想在年前創建的項目中體驗一下新版本的特性&#xff0c;于是查看了…

樹莓派設置時區

查看當前時間 piraspberrypi-CM5:~ $ date Mon 28 Jul 09:22:38 BST 2025BST 指的是 British Summer Time&#xff0c;即英國夏令時&#xff08;UTC1&#xff09;。 所以這是英國&#xff08;倫敦等地&#xff09;在夏令時期間的本地時間&#xff0c;比標準的 UTC 時間快 1 小時…

C Primer Plus 第6版 編程練習——第13章(下)

8.編寫一個程序&#xff0c;以一個字符和任意文件名作為命令行參數。如果字符后面沒有參數&#xff0c;該程序讀取標 淮輸入;否則&#xff0c;程序依次打開每個文件并報告每個文件中該字符出現的次數。文件名和字符本身也要一同報告。程序應包含錯誤檢查&#xff0c;以確定參數…

王樹森推薦系統公開課

github&#xff1a;https://github.com/wangshusen/RecommenderSystem b站&#xff1a;推薦系統公開課——8小時完整版&#xff0c;講解工業界真實的推薦系統_嗶哩嗶哩_bilibili 知乎上一個比較全面的筆記&#xff1a;https://zhuanlan.zhihu.com/p/678664853 我的筆記&…

<RT1176系列11>DMAMUX解讀

1、概述DMA&#xff08;直接內存訪問&#xff0c;DIrect Memory Access&#xff09;工作原理&#xff1a;DMA控制器直接在內存和外設之間傳輸數據&#xff0c;而不需要CPU的干預。優點&#xff1a;極大地提高了數據傳輸效率&#xff0c;釋放CPU資源。適合大批量數據傳輸&#x…

【MySQL】MySQL 緩存方案

一、MySQL主從同步 1.1 主從同步是什么 MySQL 主從同步是一種數據復制機制&#xff0c;通過該機制可以實現將主數據庫&#xff08;Master&#xff09;的 DDL&#xff08;數據定義語言&#xff09;和 DML&#xff08;數據操縱語言&#xff0c;如 update、insert、delete&#x…

base64.b64encode(f.read()).decode(‘utf-8‘)作用

base64.b64encode(f.read()).decode(utf-8) 的作用是將文件內容&#xff08;通常是二進制文件&#xff09;編碼為一個 UTF-8 格式的字符串。下面逐步解釋這個過程&#xff1a;f.read()&#xff1a;讀取文件 f 中的內容。這將返回文件的二進制數據。base64.b64encode()&#xff…

集合框架學習

目錄 集合體系結構 Collection的常用方法 Collection的遍歷方式 迭代器 增強for Lambda表達式 集合框架概述 集合體系結構 單列集合 Collection代表單列集合,每個元素(數據)只包含一個值 雙列集合 Map代表雙列集合,每個元素包含兩個值(鍵值對) Collection集合特點 Li…

經典算法題解析:從思路到實現,掌握核心編程思維

算法是編程的靈魂&#xff0c;也是面試中的重點考察內容。本文精選了幾道經典算法題&#xff0c;涵蓋字符串處理、鏈表操作、樹遍歷等常見場景&#xff0c;通過詳細解析幫助你理解算法設計思路與實現細節&#xff0c;提升解題能力。一、無重復字符的最長子串題目描述給定一個字…

【Unity游戲】——1.俄羅斯方塊

搭建場景 使用任意方塊、純色瓦片或者其他圖形作為背景&#xff0c;設置其大小與目標大小一致或者更大&#xff0c;設置左下角為場景頂點&#xff0c;并放置在&#xff08;0&#xff0c;0&#xff09;處。調整攝像機至合適位置。 制作游戲預制體 每個方塊預制體包含有4個小方…

【C++進階】---- 二叉搜索樹

1.二叉搜索樹的概念 ?叉搜索樹?稱?叉排序樹&#xff0c;它或者是?棵空樹&#xff0c;或者是具有以下性質的?叉樹: ? 若它的左?樹不為空&#xff0c;則左?樹上所有結點的值都?于等于根結點的值 ? 若它的右?樹不為空&#xff0c;則右?樹上所有結點的值都?于等于根結…

基于 OpenCV 與 sklearn 的數字識別:KNN 算法實踐

在計算機視覺領域&#xff0c;數字識別是一個經典問題&#xff0c;廣泛應用于郵政編碼識別、車牌識別等場景。本文將介紹如何使用 OpenCV 進行圖像處理&#xff0c;并結合 KNN&#xff08;K 近鄰&#xff09;算法實現數字識別&#xff0c;同時對比 OpenCV 內置 KNN 與 scikit-l…

利用徑向條形圖探索華盛頓的徒步旅行

利用徑向條形圖探索華盛頓的徒步旅行 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import pandas as pdfrom matplotlib.cm import ScalarMappable from matplotlib.lines import Line2D from mpl_toolkits.axes_grid1.inset_locator impor…

火狐瀏覽器中國特供版關閉,如何下載 Firefox 國際版?如何備份數據?

火狐瀏覽器中國特供版關閉&#xff0c;如何下載 Firefox 國際版&#xff1f;如何備份數據&#xff1f;各位火狐老用戶注意了&#xff01;7 月 27 日北京謀智火狐正式發布公告&#xff1a;2025 年 9 月 29 日 24:00 起&#xff0c;中國特供版賬戶服務將徹底關閉&#xff0c;所有…

C語言操作符詳解:從基礎到進階

在C語言中&#xff0c;操作符是構建表達式的基礎&#xff0c;掌握各類操作符的用法、優先級及特性&#xff0c;對寫出高效且正確的代碼至關重要。本文將系統梳理C語言操作符的核心知識點&#xff0c;包含實例代碼與詳細解析&#xff0c;助你徹底搞懂操作符。 1. 操作符的分類 C…

鴻蒙平臺運行Lua腳本

1. 目標 使用 rust 在移動端實現 Lua 腳本的運行。 2. 核心步驟 [Rust Host App]│├── [mLua VM] (通過 mlua 或 rlua 庫嵌入)│ ├── 獨立Lua狀態&#xff08;隔離執行&#xff09;│ ├── 受限標準庫&#xff08;禁用危險函數&#xff09;│ └── 內存/CPU限…

【Ubuntu】發展歷程

Ubuntu 是一個基于 Debian 的 Linux 發行版&#xff0c;由 Canonical 公司開發和維護。它以其易用性、穩定性和強大的社區支持而著稱。以下是 Ubuntu 從發布以來的主要版本和發展歷程&#xff1a;1. Ubuntu 4.10 "Warty Warthog" (2004)發布日期&#xff1a;2004年10…

k8s下springboot-admin 監控服務部署,客戶端接入

踩坑及解決以下問題 1、客戶端監控信息不顯示,需要暴露監控檢查接口路徑 2、服務端不顯示客戶端日志,需要啟用日志,并指定日志路徑 3、解決在k8s下,客戶端多實例注冊id相同,如2個實例只顯示一個 整體架構 springboot-admin 由服務端和客戶端組成 服務端負責 1、提供 We…

git刪除遠程分支和本地分支

1. git刪除遠程分支 git push origin --delete [branch_name]2. 刪除本地分支 2.1 git branch -d 會在刪除前檢查merge狀態&#xff08;其與上游分支或者與head&#xff09;。 git branch -d [branch_name] 2.2 git branch -D 直接刪除 git branch -D 是 git branch --delete…