?? 說明.txt
字號:
基于完成端口的TCP網絡通信框架實現
工程iocp中包含了框架實現的所有代碼,工程server和client是對該框架的簡單測試
和應用。框架實現了基于消息的TCP網絡通信,(避免了TCP的數據“粘連”問題)并進
行了封裝,封裝后的界面iocpapi.h非常簡潔,應用程序代碼只需要簡單包含
iocpapi.h,就可以實現自己的網絡應用.具體例子可以參考server和client代碼提供
的兩個類分別用于服務器端和客戶端(一般來說客戶端不用管理大量連接,所以有點
殺雞用牛刀的味道,不過為了和服務器對應,應該使用該客戶端,除非你自己實現
框架的消息格式)
以下內容為想更深入了解該框架的人士提供:
網絡流上消息的格式為"兩子節消息長度+消息體",框架以此來識別消息,
消息體格式任意,可以由應用自行定義,如果不使用該框架的客戶端,
只需要實現該消息格式即可
如果應用想使用更原始的框架,比如,實現自己的消息格式,可以直接使用iocp.h
里面的類。原始框架不區分消息邊界
主要技術細節問題
1 數據包的順序問題
框架保證在同一連接上的數據收發的次序性(先發送先收到).具體實現是基于在每
個連接上最多同時只有一個WSASend操作(發送次序性)和一個WSARecv操作(接收次序性)
來保證的
2 資源的釋放
框架保證資源的正確釋放,無論是主動或者被動斷開連接,每個連接僅被釋放一次,
處理函數被調用一次.完成端口隊列里面遺留的數據被正確清理
框架的優點:
1 簡潔,可擴展,
使用非常方便,并且應用不需要關心實現代碼的任何細節,只需要派生iocpapi.h里的兩個類即可
2 線程無關性
應用不需要關心任何和線程相關的細節,所有線程相關的問題隱藏在實現背后
框架缺點:
1 框架未實現自身內存管理
由于頻繁的收發數據包,系統的內存分配效率低,并且存在碎片問題,框架本身
所有內存都是通過new和delete管理的,如果要在該框架的基礎上實現內存管理,
就需要修改本身的代碼,針對
1)NetMessage,PerIoData重載new和delete運算符
2)修改類中標準容器list,map等的分配器
2 框架未進行客戶端管理
這是為了盡量輕量級的實現框架,其實框架內部對SOCKET有管理,之所以沒有提供
接口,是由于,
1)內部的管理過于簡單,不適應于一般的應用
2)內部的管理數據不適宜暴露給用戶
一般來說,應用應該自己管理所有的連接,并實現超時關閉的策略
3 框架未進行流量控制
這也屬于管理的內容,連接數目過多,數據發送過于頻繁,就會引起下面的問題
4 框架并非異常安全
如果流量過大,程序無法處理,那么內存會被耗盡,如果虛擬內存也被耗盡,那么
new 會失敗,此時異常產生,程序崩潰,所以如果server需要管理非常大的流量,那么
應用程序本身需要進行流量控制
程序在內網上測試6個小時測試通過,沒有在外網上測試過
本人聯系方式
QQ 89707598
very_fyy@163.com
如果你使用該類,請盡量把你的疑惑,發現的問題和評價通過以上方式告知本人
2007-04-13
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -