DIOCP開源項目-高效穩定的服務端解決方案(DIOCP + 無鎖隊列 + ZeroMQ + QWorkers) 出爐了

[概述]

自從上次發佈了[DIOCP開源項目-利用隊列+0MQ+多進程邏輯處理,搭建穩定,高效,分佈式的服務端]文章後,獲得了不少朋友的支持和確定。這加大了個人開發動力,通過幾個晚上的熬夜,終於在昨天晚上,DEMO基本成型,今天再加入了QWorkers來作邏輯處理進程,進一步使得邏輯處理進程更加方便和高效。今天特地寫篇blog來記錄個人心得與你們分享。html

 

[功能實現說明]

沿用上次的草圖緩存

目前DEMO圖上的功能都已經實現。下面談談各部分的實現。網絡

 

  • 通訊服務, 由DIOCP實現,擔當與客戶端的通訊工做,負責接收數據包,處理粘包和數據回傳的工做
  • 數據分發隊列, 由uWorkDispatcher單元實現, 其中利用 OTL中的無鎖隊列擔當數據的緩存,在使用uJobPusher推送隊列中的任務。
  • 數據推送,由ZeroMQ完成,使用Push/Pull模式,因爲第一次接觸ZeroMQ,可能沒有挖掘到ZeroMQ的潛力,致使如今進程之間傳遞都是線程操做,開始一直擔憂這個問題,遲遲沒有下手,最後仍是堅持用了,效果還不錯。
  • 邏輯處理進程,由主控臺程序完成,裏面主要收到數據分發隊列中分發過來的任務後,進行邏輯處理,而後再將須要返回的數據,推送回通訊服務進程(由uJobReceiver單元處理),並投遞到DIOCP傳輸隊列,該進程中使用到QWorkers。等一下我專門介紹這個方便的隊列任務處理類。
  • 客戶端,由TCPClient實現數據的通訊。

 

[QWorkers說明]

以前一直想設計一個這樣的東西,幾回下來都不如意,自從接觸到QWorkers後,發現原來應該這樣去設計。下面是我研究QWorkers畫的一流程圖。一箇中午的吃飯的時間,基本上就能夠理解80%,做者設計思路明確,使用簡單,並且隊列使用原子鎖,也比使用臨界高效很多。做者是QDAC開源項目的發起人。多線程

image

主要做用,任務(能夠單次任務,定時任務(好比天天12:00執行), 延時任務, 手動觸發任務)的投遞和執行。適合作邏輯運算任務。具體使用能夠參考DEMO[DIOCP\Demos\MultiProcessor\processorWithQWorker]框架

 

[ZeroMQ]

ZeroMQ是一種基於消息隊列的多線程網絡庫,其對套接字類型、鏈接處理、幀、甚至路由的底層細節進行抽象,提供跨越多種傳輸協議的套接字。ZeroMQ是網絡通訊中新的一層,介於應用層和傳輸層之間(按照TCP/IP劃分),其是一個可伸縮層,可並行運行,分散在分佈式系統間。分佈式

推薦你們看兩遍blog, 我就很少寫了。spa

ZeroMQ研究與應用分析ttp://www.cnblogs.com/rainbowzc/p/3357594.html.net

Delphi實戰: http://my.oschina.net/zeroflamy/blog/109457線程

 

[關於DEMO]

程序使用XE5編譯,設計

服務端(SERVER):DIOCP是支持D7-XE6的,因此Server能夠用D7-XE6原理上是能夠編譯的,只是工程文件是XE5編譯的,須要本身稍做處理

客戶端(TCPClient): D7-XE6都應該沒有問題。使用的標誌控件(TcpClient),標準寫法.

邏輯處理進程(processor):超級簡單的處理進程。D7-XE6

邏輯處理進程(processorWithQWorker):因爲使用了QWorkers,只能支持D2007以上的版本.

 

[關於解決方案的應用]

該框架主要用於ERP的三層框架。邏輯處理進程能夠實現熱拔插。能夠啓動多個。自動接收任務。底層穩定,持續幾個月的服務端不再是什麼難事了….

後續會結合MyBean框架作一些例子的整合。

 

歡迎你們繼續關注。

相關文章
相關標籤/搜索