[1.6 版本] 服務器間 LAN 通訊器
LanServer, LanClient從1.7版本開始退役。 Lan Server, LanClient 的角色由 NetServer, NetClient 代替 。
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的差異。
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