專案背景與願景
本專案旨在基於 JXTA (Juxtapose) P2P 協定平台 開發一套無中央伺服器的即時通訊軟體。核心理念為「以內容為中心」:使用者透過廣播訊息發佈自身狀態/興趣 (屬性標籤),其他節點依興趣過濾接收,雙向確認後建立點對點聊天管道。目標支援 10 萬+ 同時在線用戶,實現真正的去中心化、抗審查、可擴展 IM 網路。
核心需求與功能特徵
| 類別 | 需求描述 | 技術實現要點 |
| 核心通訊 | 廣播訊息發佈/訂閱 | JXTA Propagation Pipe / Rendezvous 節點轉發,屬性型路由 (Attribute-based Routing) |
| 即時文字聊天 (一對一、一對多) | 雙向 Pipe (InputPipe/OutputPipe) 建立端對端加密通道 |
| 好友發現與狀態感知 | Advertisement (Peer/Service/Pipe Adv) 發佈與 Discovery Service 查詢 |
使用者介面需求 (參考 QQ 風格)
- 屬性標籤:IM 號、性別、年齡、狀態、心情圖示、聊天記錄
- 廣播訊息選項:共享資料 (檔案/空白文檔協作)、加好友、加黑名單
- 單次訊息上限 > 10KB、暱稱長度 200 bytes
技術架構設計 (基於 JXTA 協定棧)
平台選型理由
- 無中央伺服器:降低基礎設施成本,適合開源社群自發部署。
- 穿透 NAT/Firewall:JXTA 內建 Relay/Rendezvous 機制解決 P2P 連通性難題。
- 標準化協定:XML 訊息格式、統一 Peer ID、跨語言互通 (Java/C/C# 實作)。
- 安全性:支援 TLS 管道加密、訊息簽名驗證、存取控制 (ACL)。
關鍵模組劃分
- 核心網路層:JXTA Configurator、NetworkManager、PeerGroup 建立、Rendezvous/Relay 角色選舉。
- 服務發現層:發佈
ServiceAdvertisement (聊天服務)、PipeAdvertisement (聊天管道)、定期 DiscoveryService.getRemoteAdvertisements() 掃描在線好友。
- 訊息路由層:
EndpointService 建立連線、PipeService 建立單向/雙向管道、ResolverService 查詢離線訊息/檔案索引。
- 應用邏輯層:使用者資料模型、廣播內容解析/過濾、聊天會話管理、檔案傳輸控制、UI 事件綁定。
- 持久化/安全層:本地 SQLite/LevelDB 儲存好友列表/聊天記錄/私鑰、支援多種加密演算法可插拔 (AES/ChaCha20-Poly1305)。
非功能性需求
| 維度 | 指標 | 驗收標準 |
| 效能 | 訊息端到端延遲 | 同城 < 200ms,跨國 < 800ms (P2P 直連) |
| 擴展性 | 同時在線用戶 | 目標 100,000+ (依賴超級節點分層路由) |
| 安全性 | 通訊加密 | 強制 TLS 1.3 + 完美前向保密 (PFS) |
| 相容性 | 字元集 | 全域 Unicode/UTF-8 |
| 互操作 | 跨平台 | Java SE 8+、Android、Desktop (Swing/JavaFX) |
開發里程碑與風險
| 階段 | 里程碑 | 預估工期 | 主要風險 |
| 1. 協定研究 | JXTA 協定指南研讀、核心 API 原型驗證 | 2 週 | JXTA 社群活躍度低、文件過時 |
| 2. 核心網路 | PeerGroup 建立、NAT 穿透、廣播/管道通訊打通 | 4 週 | Relay/Rendezvous 節點部署成本 |
| 3. 應用功能 | 好友發現、聊天會話、檔案傳輸、UI 原型 | 6 週 | 大規模併發下管道管理複雜度 |
| 4. 安全強化 | 端到端加密、認證授權、審計日誌 | 3 週 | 金鑰管理/輪換機制設計 |
| 5. 壓測優化 | 萬級併發模擬、記憶體/CPU 調優、文檔完善 | 4 週 | 真實網路環境差異大 |
參考資源
結語
JXTA 提供成熟的 P2P 基礎設施,但生態系已趨沉寂 (Oracle 停止維護,社群轉向 libp2p、IPFS、WebRTC)。若專案為教學/研究/特定封閉網路,JXTA 仍是寶貴學習資產;若面向公網產品級應用,建議評估 libp2p (Go/JS/Rust) + WebRTC DataChannel 現代棧,擁有更活躍社群、瀏覽器原生支援、更佳 NAT 穿透 (ICE/STUN/TURN)。本需求文檔可作為遷移至新棧的架構藍圖。