C語言實現一種簡單的應用服務器內部數據結構的思路(一)

    用C語言寫應用服務器的過程當中,因爲服務器一般要和多個外圍系統打交道,接受多個客戶端的請求,或調用其餘應用的服務,中間可能涉及到多種通信格式,因此在服務器內部維護一套與外界無關的數據格式是必須的。而在通常的業務開發中,常常須要變更字段,很難在前期肯定須要的全部字段,因此內部結構的靈活性與可擴展性也是很重要的,並且底層的字段定義的長度,類型,或者添加新的字段時不該引發上層的修改。java

    C語言中最簡單的內部接口可能就是採用一個結構體,這種方式實現最簡單,實際上是語言內置,無需實現,並且訪問時存取效率很高;缺點就是結構是靜態編譯的,一旦修改就涉及到程序的從新編譯,並且在報文轉換過程當中只能採用大量的重複編碼來拷貝數據,數據的對應關係也是靜態的。而比較靈活的數據存儲方式可能相似java中的Map接口,採用get和put方式,數據採用key->value的方式存儲,這樣靈活性與可擴展性很是好,上層應用編碼舒服,數據與具體的取數據的方法再也不靜態的耦合在一塊兒,可是可能涉及到一些內存的動態分配,內部實現要求較高,並且有些效率的問題。本文的思路是在保證上層應用編碼舒服上,採用比較簡單的思路來實現一種內部結構。服務器

    在通常的開發過程當中,一次開發所須要的數據是能夠定下來的(下次需求的變動須要什麼數據是不定的),因此只要實現字段好添加就能夠了,而對上層的應用的數據結構就採用get和put這種key->value的方式。這個思路的核心其實很簡單,只要維護一份配置文件,把須要的全部字段的key名字,須要存儲空間的大小保存在裏面,程序運行後加載這個文件,按照配置將各個字段的存儲位置分配好,並在內存中維護一份key和對應該數據的存儲地址的映射關係就ok了,在get時根據key找到對應的地址,將數據讀出來,put時也相似,在使用上與Map差很少易用,主要的區別就是對應的key必需事先在文件中配置,否則在存取時報錯。固然,在這個的基礎上必須結合實際作一些擴展才比較好用。數據結構

相關文章
相關標籤/搜索