網絡通信架構
ICE的網絡通信的架構在 Pattern-Oriented Software Architecture (Vol.2) 一書中有詳細描述。主要採用了異步的網絡通信方式。如下圖所示:
其中Async Service Layer處理異步的連接,斷開,接受數據等請求。在Windows 版本的ICE中使用了ConnectEx(), AcceptEx()等異步接口。
在異步請求完成後Windows會將結果緩存在由操作系統管理的Queue 中, 上層通過GetQueuedCompletionStatus()獲得queue中的結果。
ICE使用了一個ThreadPool 不斷請求queue中的異步結果並處理。我想這就是ICE高效的異步網絡通信架構的核心。
異步消息處理
連接
ICE的ConnectEx的調用請參見cpp/src/ICE/Network.cpp 的 doConnectAsync()函數。