首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF P2P 對等網路狀態同步四大模式深度解析:從中心服務器到鄰居同步的 WeSpend 實戰

     編輯:關於.NET

四大狀態同步模式比較

模式架構優點缺點
固定狀態服務器混合 P2P:廣播走 Mesh,狀態集中於已知 Web/WCF 服務實作簡單、狀態單一權威需部署/維護中心伺服器、單點故障
動態選舉服務器Mesh 節點演算法選出一節點為狀態服務器 (如最舊/最新節點)無固定基建選舉演算法複雜、服務器離線/黑洞需容錯、實作難度高
數據廣播新節點加入或明確請求時,全節點廣播完整狀態副本無中心、無選舉邏輯頻寬浪費隨節點數指數增長、同步瓶頸、需去重機制
鄰居同步新節點單跳請求鄰居 ID 清單 → 比對 → 單跳請求缺失明細 → 自動傳播無中心、自動容錯 (WCF 路由自動繞過故障節點)、頻寬效率高需處理重入與並發同步

WeSpend 記帳應用實戰

核心 WCF 技術

  • NetPeerTcpBinding:P2P 通訊綁定。
  • [PeerHopCount] 訊息屬性:限制訊息跳數 (TTL),實現單跳。
  • 雙向回調契約:目標節點直接回呼發起者,無需每節點裝載獨立服務。

訊息契約範例

[MessageContract]
public class TransactionIdRequest
{
    [MessageBodyMember] public string Requester;
    [PeerHopCount] public int Hops = 1; // 單跳
}

同步序列圖解

  1. 新節點發送 TransactionIdRequest (Hops=1) → 單跳範圍內節點收到。
  2. 鄰居透過 CallbackChannel.TransactionIdsReply(...) 回覆本地所有交易 ID 列表。
  3. 新節點比對本地缺失 ID,發送 RequestTransactionDetails(missingIds) (單跳)。
  4. 擁有資料的鄰居回呼 TransactionDetailsAck(transactions) 回傳完整明細。
  5. 狀態自動在 Mesh 中傳播:每節點僅與鄰居同步,最終達到全網一致。

中心服務器模式 無狀態服務器對等網格 鄰居同步序列

並發防護

使用 Semaphore 確保同一時間僅一個同步操作執行,避免重入亂序。

結語

WCF P2P 配合 PeerHopCount 與雙向回調,讓無中心、自動容錯、高效率的鄰居同步成為現實。WeSpend 原始碼可下載體驗:雙機修改 app.config 模擬不同用戶,觀察交易自動同步傳播。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved