⓪編著: 蕭沖

 

TServerSocket 與 TClientSocket 都算是一個包裝(Wrapper)物件的容器(container),也就是說它本身只是把Socket物件含入裡面,並透過介面來操作含在裡面的Socket物件。

真正有"作用"的Soket物件是TCustomWinSocket這個類別,注意裡面有「Win」這個字,若沒這個字,那就僅用Container,如上面講的TClientSocket。因此,在隨作各種事件與方法時,都是在處理TCustomWinSocket的子類別,如TServerWinSocket ,TServerClientWinSocket等。

當TServerSocket使用stNonBlocking模式時,其實就是選用了Windows Socket Mode 中的WSAAsyncSelect方式(可參考我之前的相關文章(http://aftcast.pixnet.net/blog/post/22191725)。簡單講就是用 Post Windows Message (FD_CONNECT、FD_CLOSE、FD_READ、FD_WRITE、FD_ACCEPT等事件)至Application的方式來處理,因此這時候負責收封包的OnClientRead的handler就算是Thread-safe的。相反的,若是stThreadBlocking模式,則於Accept時,會產生相對應的一個thread來處理與client端的連線,接著會去建立一個thread(你自己定的,參考下面),然後一切的存取都在thread裡,這時候就要注意Thread-safe的問題。必要時要用Critical Section、Synchronize等等。可參考我寫的關於Thread-safe的文章。

aftcast 發表在 痞客邦 留言(0) 人氣()