NetFrames
Coding Style wiki
NetFrames 是 NetFrame 模組的統一呼叫入口(Facade),以節點(NetNode)為單位管理多組網路連線。每個節點可搭配獨立的傳輸實作(INetProvider)與連線選項(NetOption),涵蓋節點註冊、連線、傳送資料與關閉,並提供驅動網路輪詢的更新器控制。
| 命名空間 | OxGFrame.NetFrame |
| 類型 | public static class |
| 原始碼 | NetFrames.cs |
using OxGFrame.NetFrame;
注意 呼叫連線相關 API 前,需先自行建立 NetNode 並透過 AddNetNode 註冊至管理器,完整建置流程請參考 NetFrame 介紹。
快速上手
// 建立網路節點(使用內建 TCP Provider;NetTipsExample 為自訂的 INetTips 實作)
var netNode = new NetNode(new TcpNetProvider(), new NetTipsExample());
netNode.SetResponseBinaryHandler(recvData => Debug.Log($"收到 {recvData.Length} bytes"));
// 註冊節點(單一連線使用預設 nnId = 0 即可)
NetFrames.AddNetNode(netNode);
// 連線至伺服器
NetFrames.Connect(new TcpNetOption("127.0.0.1", 8888));
// 傳送二進位資料
NetFrames.Send(new byte[] { 0x01, 0x02 });
// 關閉連線並移除節點
NetFrames.Close(0, removeNetNode: true);
通用規則
多節點管理 (nnId)
NetFrame 以節點(NetNode)為單位組織網路連線,每個節點擁有各自獨立的傳輸實作(INetProvider)、連線選項(NetOption)與狀態提示(INetTips),並以 nnId(Node ID)作為唯一識別碼進行管理,所有操作方法皆以 nnId 指定目標節點。
注意 大多數單一連線的情境,直接使用預設的 nnId = 0 即可;若需同時連線多個伺服器(如 Login Server 與 Game Server),請為各節點分配獨立的 nnId。
提醒 NetNode 本身還支援心跳、逾時檢測與重連等回呼設定(SetHeartBeatAction、SetOutReceiveAction、SetReconnectAction 等),詳細建置流程請參考 NetFrame 介紹。
內建 Provider
內建三種 INetProvider 實作,連線時搭配對應的 NetOption 衍生類使用;亦可自行實作 INetProvider 擴充其他傳輸協定。
| Provider | 底層函式庫 | 對應 NetOption | 字串傳送 |
|---|---|---|---|
TcpNetProvider | Telepathy | TcpNetOption | 不支援 |
KcpNetProvider | kcp2k | KcpNetOption | 不支援 |
WebSocketNetProvider | UnityWebSocket | WebSocketNetOption | 支援 |
注意 TcpNetProvider 與 KcpNetProvider 僅支援二進位傳送,對其呼叫字串多載的 Send 會擲出例外。
更新器 (Updater)
NetManager 使用獨立的 RTUpdater(Real-time Updater)驅動所有節點的輪詢邏輯(資料接收、心跳、逾時與重連計時)。首次呼叫任一 NetFrames API 時,管理器會自動初始化並於主執行緒啟動更新器。
提醒 RTUpdater 為即時刷新器,不受 Unity Time.timeScale 影響,即使遊戲暫停,網路通訊依然正常運作。
重要 若透過 StartUpdaterOnThread 或 ResetUpdaterOnThread 改以獨立執行緒驅動,所有網路回呼(如 Binary 接收回呼)會於非主執行緒觸發,若需操作 Unity 元件,請務必注意執行緒安全並使用 UMT 派回主執行緒。
節點管理
節點的註冊、取得與移除。NetNode 需以 new NetNode(INetProvider, INetTips) 自行建立後註冊至管理器(參考多節點管理)。