[1.6 版本] 服務器間 LAN 通訊器
LanServer, LanClient從1.7版本開始退役。 Lan Server, LanClient 的角色由 NetServer, NetClient 代替 。
LAN通訊器的特點
ProudNet服務器與網絡和服務器之間的LAN通信器的區別如下。
劃分 | ProudNet 服務器與網絡 | 服務器間LAN通信器 |
---|---|---|
主要用途 | 普通用戶應用程序和服務器的通信 | 分散式伺服器結構中各伺服器之間的通信 |
NAT 裝置滲透性 | YES | NO |
P2P relay(relay) | YES | NO |
客戶端與服務器通信協議 | TCP and UDP | TCP |
P2P 通信協議 | (Reliable) UDP | TCP |
客戶回撥方式 | Poll (來自Proud.CNetClient.FrameMove的回調) | 從線程池回調 |
lan_main提供以下主機間高速通信。
由於它僅使用 TCP,因此它使用伺服器硬體的通訊加速(TCP Offload Engine)。
與Client不同,事件和接收消息會在線程池中進行回撥。 當然,服務器方也會在thread pool中發生回電。
LAN 通訊器的使用方法
ProudNet服務器和網絡以及LAN通信器的用法幾乎相同。
以下是API的差異。
劃分 | ProudNet 服務器與網絡 | 服務器間LAN通信器 |
---|---|---|
Server | Proud.CNetServer | Proud.CLanServer |
Client | Proud.CNetClient | Proud.CLanClient |
Server event handler | Proud.INetServerEvent | Proud.ILanServerEvent |
Client event handler | Proud.INetClientEvent | Proud.ILanClientEvent |
Message pool method | Proud.CNetClient.FrameMove | None (callback in thread pool) |
LAN 通信器的 P2P 通信
Proud.CLanClient主機之間的P2P通信使用TCP協議。
在Proud.CLanServer.CreateP2PGroup等實現主機間P2P通信的瞬間啓動P2P消息時,在Pier間TCP連接完成之前,想要發送的信息將保存在各主機的本地queue中。 保存的信息在TCP連接成功後立即開始傳送。
一旦 TCP 連線建立,Proud.ILanClientEvent.OnP2PConnectionEstablished, Proud.ILanServerEvent.OnP2PConnectionEstablished 就會被回調。
反之,當TCP連線中斷時,會回呼Proud.ILanClientEvent.OnP2PDisconnected, Proud.ILanServerEvent.OnP2PDisconnected。
當為 P2P 群組中的所有成員建立 TCP 連線時,Proud.ILanClientEvent.OnGroupP2PConnectionComplete, Proud.ILanServerEvent.OnGroupP2PConnectionComplete 會被回呼。
LAN 通信設備上的 thread pool
Proud.CLanClient是事件回撥和RMI回撥發生在線程池的線程中。 而且這個線程池是由 Proud.CLanClient 準備的, 因此沒有對應於 Proud.CNetClient.FrameMove 的函數 。
Proud.CLanConnectionParam.m_netWorkerThreadCount 可以指定客戶機上所有線程池的線程數 。
LAN 用戶端的斷線處理
LAN 用戶端在連線程序(CLanClient.Connect)期間建立user worker thread pool,並在中斷連線程序(CLanClient.Disconnect)期間刪除該池,因此LAN 用戶端無法在user worker thread上執行中斷或連線命令。
如果實現,將會發生Proud.Exception。
LAN 通信器的 RMI
與RMI使用方法相同。
在服務器間通信中同步時間
與從客戶端獲取服務器時間的用法相同。
從 ProudNet 1.6 Lan Module 遷移到 1.7 Net Module
- 從1.6 Lan Module變更爲1.7 Net Module時的注意事項
調用 NetClient.Connect() 需要指定 thread model 。
調用時, 您必須將參數放入 m_userWorkerThreadModel 中, 使您能夠在多個線程中接收 user 回撥 。
或者,將您建立的線程池物件附加到 m_externalUserWorkerThreadPool 參數。
這個線程池有多個線程。
服務器間通信時,由原來的TCP通信改爲UDP base通信,需要UDP Port相關的防火牆操作。
- 如何從 1.6 Lan Module 切換到 1.7 Net Module
準備1.7庫。 庫位於<安裝文件夾>/ProudNet/lib/中。
將函數名稱從Lan更改爲Net。 變更對象包括類、函數、方法。 因爲大部分都是1:1 matching,所以可以無太大變化地轉換。
- 將1.6 Sample/SimpleLan例題遷移到1.7的例題
LanCommon → NetCommon
UUID → PNGUID
Guid::From(guid) → Guid(guid)
LanServer → NetServer
CLanServerEventSink → CNetServerEventSink
OVERRIDE → PN_OVERRID
CLanServer → CNetServer
CStartLanServerParameter → StartServerParameter
p1.m_tcpPort = g_ServerPort → p1.m_tcpPort .Add(g_ServerPort)
LanClient → NetClient
CLanClient → CNetClient
ILanClientEvent → INetClientEvent
OVERRIDE → PN_OVERRID
CLanClient::Create() → CNetClient::Create()
CLanConnectionParam → CNetConnectionParam
ProudNetServer.h → ProudNetClient.h
Last updated