基本介紹
- 中文名:CNC伺服器設計
- 系統:運行於Windows 9x/NT系統下
- 工作方式:阻塞方式和非阻塞方式
- 特點:CNC 伺服器採用了混合方式
數據結構,多執行緒技術,Winsock,
數據結構
CNC 伺服器的數據結構主要由三部分組成:
(3)每個組都有一張用於管理“發布—訂閱”的數據的Hash表。由於同一時刻,系統可能存在多個生產者與消費者,數據的存入、取出速度成為伺服器性能的重要指標。Hash表可以提供比鍊表更快的數據檢索速度。Hash表中的數據項結構見DataElement :
struct DataElement
{
char strGroupName[16]; // 工作組的名稱
char strDataName[16]; // 數據的名稱
BYTE iStorageType; // 存儲類型: STORAGE_FILE 或 STORAGE_MEMORY
ColeDateTime TimeToDie; // 作廢時刻
BOOL bLock; // 鎖定標誌: TRUE 或 FALSE
DWORD dwLength; // 數據的長度
char *pchContent; // 數據內容
};
存儲類型(iStorageType)的用途:把數據全部保存在記憶體中將非常消耗伺服器的記憶體資源,在很多情況下是沒有必要的。為了提高記憶體的使用效率,伺服器僅把生命期較短或者長度較短的數據保存在記憶體中(即為STORAGE_MEMORY類型),而把生命期較長或者長度較長的數據保存在檔案中(即為STORAGE_FILE類型)。
鎖定標誌(bLock)的用途:很多客戶機可能同時訂閱某個數據,而該數據可能已超出作廢時刻即將被刪除。為避免衝突,規定只要有客戶機訂閱數據,就用iLock標誌來鎖定此數據,直到訂閱完成後才消除鎖定。
多執行緒技術
伺服器有一個主執行緒和多個子執行緒。主執行緒負責客戶機的入連線請求,然後創建一個子執行緒來處理這個TCP連線。每個子執行緒按照CNC API的協定與客戶機通訊。由於有多個子執行緒共享伺服器中的數據,多執行緒對共享資源的同步訪問成為實現的難點。CNC 主要採用了關鍵區、互斥對象等同步手段解決這個問題。