.net如何處理高併發socket,創建高性能健壯的socket服務

1.使用supersocketwindows

  • 高性能的事件驅動通訊;
  • 很是簡單易用; 你只須要經過建立幾個類就能得到一個健壯的 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 Layers

SuperSocket 對象模型圖示意圖

SuperSocket Object Model

SuperSocket 請求處理模型示意圖

SuperSocket Request Handling Model

SuperSocket 隔離模型示意圖

SuperSocket Isolation Model

 

看到一個問題,說如何保持5000-10000+的健壯的socket服務。網絡

初學者確定是會把每一個鏈接都開一個線程來監聽。這很浪費資源多線程

一般只會(動態地)佔用幾個線程就能保持3000個長鏈接會話了。
「爲每一個監聽對象開一個新的線程」這是設計錯誤。你可使用NetworkStream的異步Read,在沒有消息的時候無需阻塞在什麼線程裏。架構

據不一樣的操做系統,多線程的約束條件也不一樣。當你發現工做線程超過1000個,或者IOCP(IO完成端口)線程超過800個,就應該趕忙斷掉服務器進行維護了。
首先要有一個意識,使用幾個、十幾個線程就足以應付上千個普通業務鏈接了。
有人說「若是我要保持1000個客戶端鏈接,就得開1001個線程來接收數據」,這純粹是瞎扯。請必定要注意。併發

我說的「工做線程」是指你的進程中使用的工做線程總數,而不是隻windows的。異步

在你的windows中,總線程數超過1500個是常常有的事情。你能夠打開你的進程管理器看看cpu的指標,看看當前有多少線程在切換使用。極可能超過1500個。可是能夠監視每個單個的進程,看看它的線程數,一般只有10個左右(只有System線程數會有100多)。

而你的服務器進程,工做線程數不該該過高。日常只有十幾個線程足以應對幾千客戶端了。socket

若是你用.net 開發,你可使用  supersocket 這個是我目前開發比較全面的, 或者用一個較 fastsocket的,也不錯(相關更輕一點).工具

相關文章
相關標籤/搜索