spserver 開源伺服器框架研究與分析
阿新 • • 發佈:2019-02-04
網上開源的C/C++伺服器框架 還是比較少的。 最近研究了 spserver , 裡面用了較多的設計模式,使用設計模式的目的是把不變的東西和可變的東西分離並且封裝起來,避免以後修改程式碼, 應用設計模式的書裡面講的就是 “對修改關閉,對擴充套件開放”,但是濫用設計模式會把簡單的問題複雜話了。
spserver程式碼量比較少,比較容易看懂,如果只是做一個簡單的echo伺服器的話,spserver 可以給新手一個快速搭建伺服器的框架。
用vld測試後, 發現spserver有很多記憶體洩露的地方。並且 msgqueue_destroy 函式會造成執行緒阻塞,程式無法正常結束。
spserver 裡面的半同步半非同步模式相當於 主執行緒負責所有的資料收發, 工作者執行緒負責邏輯。 主執行緒與工作者執行緒之間通過訊息佇列進行通訊。主執行緒收到資料後,通知工作者執行緒,有資料,工作者執行緒進行報文解析與處理, 把要傳送的資料放入佇列,然後通知主執行緒,有資料了, 你去傳送把。
這種模型可以應對邏輯複雜, 處理時間長, 需要傳送和接收的資料比較少的情況比較合適。但是如果是需要處理類似檔案伺服器這樣,IO的資料很多,但是邏輯很簡單的伺服器,則不合適, 主執行緒會成為瓶頸,也即是說IO會成為瓶頸。
另外是spserver 沒有實現 作為客戶端連線其他伺服器的程式碼,需要使用者自己實現連線到其他伺服器的情況。
我現在正在封裝一個開源的伺服器框架,這個框架會比spserver更通用,範圍更廣,會根據遊戲伺服器的系統架構封裝一套比較完整的實現, 從資料庫代理伺服器,登入伺服器,大廳伺服器,遊戲伺服器, 閘道器伺服器等進行框架的處理。