概念
完成連線埠基本上公認為一種在windows服務平台上比較成熟和高效的IO方法,利用完成連線埠進行重疊I/O的
技術在WindowsNT和WIndows2000上提供了真正的可擴展性。完成連線埠和Windows Socket2.0結合可以開發出支持大量連線的網路服務程式。運行
首先來看看重疊I/O(Overlapped I/O):
重疊I/O(Overlapped I/O)機制允許發起一個操作,然後在操作完成之後接受到信息。對於那種需要很長時間才能完成的操作來說,重疊IO機制尤其有用,因為發起重疊操作的執行緒在重疊請求發出後就可以自由的做別的事情了。
在WinNT和Win2000上,提供的真正的可擴展的I/O模型就是使用完成連線埠(Completion Port)的重疊I/O。
接下來看看完成連線埠(Completion Ports )
其實可以把完成連線埠看成系統維護的一個佇列,作業系統把重疊IO操作完成的事件通知放到該佇列里,由於是暴露 “操作完成”的事件通知,所以命名為“完成連線埠”(COmpletion Ports)。一個socket被創建後,可以在任何時刻和一個完成連線埠聯繫起來。
一般來說,一個應用程式可以創建多個工作執行緒來處理完成連線埠上的通知事件。工作執行緒的數量依賴於程式的具體需要。但是在理想的情況下,應該對應一個CPU創建一個執行緒。因為在完成連線埠理想模型中,每個執行緒都可
作用
總之,開發一個可擴展的Winsock伺服器並非十分困難的。僅僅是開始一個監聽socket,接收連線,並且進行重疊傳送和接收的IO操作。最大的挑戰就是管理系統資源,限制重疊Io的數量,避免記憶體危機。遵循這幾個原則,就能幫助你開發高性能,可擴展的服務程式。
socket的接收緩衝,因為接收事件僅僅在AcceptEx調用中發生。保證每個socket都有一個接收緩衝不會造成什麼危害。一旦客戶端/伺服器在最初的一次請求(由AcceptEx完成)之後進行互動,傳送更多的數據,那么取消接收緩衝更是一個很不好的做法。除非你能保證這些數據都是在每個連線的重疊IO接收里完成的 。