無論什麼平台,編寫支援高併發性的網路伺服器,瓶頸往往出在i/o上,目前最高效的是採用asynchronous i/o模型,linux平台提供了epoll,windows平台提供了i/o completion port(io完成埠,即iocp)。
windows自winsock2開始就提供了iocp支援,可以通過c++直接呼叫api,但對於基於.net的c#開發,是在.net framework2.0開始才引入的,在2.0版本下,最高效的網路伺服器是通過非同步socket的一些列begin***,end***方法實現的, 底層就是基於iocp的。
當.net framework公升級到2.0 sp1之後,.net socket又提供了一種更高效的一些列***async方法,對底層iocp實現效能有不少改進,.net framework公升級到3.5之後更是成熟穩定,微軟也開始大力推廣。
在實際應用中,證明c#編寫基於.net iocp的高效能伺服器可以支援10000個以上的tcp長連線。但在具體實現過程中需要注意幾個問題:
1.socketasynceventargs和buffer最好預先分配,並能**重複利用。
2.乙個socket的send和receive最好分別對應乙個socketasynceventargs,因為當乙個 socketasynceventargs被receiveasync呼叫掛起後,在呼叫sendasync時就會出異常。同樣不要對乙個 socketasynceventargs在乙個非同步操作被掛起時再次呼叫。
ftp伺服器專案
位址 1.簡介 2.具體實現 2.1 服務端 主要負責處理客戶端發來的指令,對於複雜指令即比較耗時的指令 get,put 用子執行緒進行處理,其餘指令用主線程處理 2.1.1 執行緒池 主要分為執行緒池的建立和啟動 定義單個任務 typedef struct node node t,pnode t ...
伺服器學習
安裝環境 apache 命令 etc init.d httpd start stop restart status apache開啟日誌 customlog usr local apache logs web.log combined配置ssl,阿里雲申請證書 在vhost新增配置 document...
ubuntu rails專案伺服器部署
我的原文所在 ubuntu 伺服器環境搭建 注意 linux 平台下 debian ubuntu 使用apt get fedora centos使用yum 配置git sudo apt get install vim 詳情請看大師寫的vim配置檔案 sudo apt get install zsh ...