1.使用supersocket
- 高性能的事件驅動通信;
- 非常簡單易用; 你只需要通過創建幾個類就能獲得一個健壯的 Socket 服務器;
- 內置的命令行協議讓你能夠迅速創建一個網絡命令行接口服務器;
- 強大且高性能的協議解析實現工具幫你簡化了網絡數據的分析工作;
- 靈活的配置功能和友好的配置 API;
- 多監聽器支持; 讓你在一個服務器實例內監聽多個端口;
- 多服務器實例托管的支持讓你從容面對復雜的部署需求;
- 應用程序域和進程級別的隔離能夠滿足你大部分的宿主場景;
- 內置的 SSL/TLS 加密支持;
- 會話級別的發送隊列能夠讓你通過會話並發的發送數據,並保持高性能和可控性;
- SuperSocket 的命令處理模式讓你的業務邏輯更清晰,更有條理;
- 優良的可擴展 API 支持: Command Filter, Connection Filter, Command Loader;
- 可替換的日志架構允許你使用你喜歡的日志組件;
- 動態語言的支持; 允許你用 Python 之類的腳本語言來實現命令;
- 與 Mono/Linux 保持二進制級別的兼容;
- Windows Azure 的支持;
- 內置你可以直接用於 Flash 或 Silverlight 客戶端的 Socket 策略服務器;
官網地址:http://www.supersocket.net/
SuperSocket 層次示意圖
SuperSocket 對象模型圖示意圖
SuperSocket 請求處理模型示意圖
SuperSocket 隔離模型示意圖
看到一個問題,說如何保持5000-10000+的健壯的socket服務。
初學者肯定是會把每個連接都開一個線程來監聽。這很浪費資源
通常只會(動態地)占用幾個線程就能保持3000個長連接會話了。
“為每個監聽對象開一個新的線程”這是設計錯誤。你可以使用NetworkStream的異步Read,在沒有消息的時候無需阻塞在什么線程里。
據不同的操作系統,多線程的約束條件也不同。當你發現工作線程超過1000個,或者IOCP(IO完成端口)線程超過800個,就應該趕緊斷掉服務器進行維護了。
首先要有一個意識,使用幾個、十幾個線程就足以應付上千個普通業務連接了。
有人說“如果我要保持1000個客戶端連接,就得開1001個線程來接收數據”,這純粹是瞎扯。請一定要注意。
我說的“工作線程”是指你的進程中使用的工作線程總數,而不是只windows的。
在你的windows中,總線程數超過1500個是經常有的事情。你可以打開你的進程管理器看看cpu的指標,看看當前有多少線程在切換使用。很可能超過1500個。但是可以監視每一個單個的進程,看看它的線程數,通常只有10個左右(只有System線程數會有100多)。
而你的服務器進程,工作線程數不應該太高。平常只有十幾個線程足以應對幾千客戶端了。
如果你用.net 開發,你可以使用 supersocket 這個是我目前開發比較全面的, 或者用一個較 fastsocket的,也不錯(相關更輕一點).