Hay Day系統設計沉思錄——數據存儲

       對Hay Day的農場數據的存儲進行一些推斷。

      服務器會對所有邏輯相關的農場中對象進行存儲:

         (1) 對象在當前玩家農場中的唯一標識 ID

    (2) 對象的類型

         (3) 對象的屬性, 公共屬性包括朝向(左右鏡像),位置(x, y) ,私有屬性根據類型的不同而不同

         這樣,服務器在玩家登錄時下發的協議結構大致如下:

        message FarmInfo

       {

                repeated Land lands = 1;                       // 田地信息

                repeated AnimalFold animal_folds = 2;     //  動物圈養信息(如牛,雞,豬,羊等)

                repeated GoodsMachine goods_machines = 3; // 貨物機器信息(麪包機,燒烤機等)

                repeated WareHouse       ware_houses = 4;       // 倉庫信息(包括貨倉和糧倉)

                repeated NaturalObject     natural_objects = 5;   // 自然物件(如大樹,小樹,石頭等)

               // 其他信息......

       };

         

        // 田地信息可以這樣設計:

         message Land

        {

                required uint32     id =  1;                        // 對象的唯一標識

                requried Position pos = 2;                      // x,y 座標

                required bool       is_right_dir  = 3         // 是否朝右

                optional short     state = 4;                    // 狀態(包括空閒,作物成長,作物成熟)

                optional short     crop_type = 5;           // 作物種類(包括麥子,甘蔗,玉米等),在非空閒狀態下有意義

                optional uint32     growed_time = 6;     // 已經成長了的時間,單位爲秒,在作物成長狀態下有意義             

        }

           message AnimalFold 

        {

                required  uint32     id =  1;                        // 對象的唯一標識

                requried  Position  pos = 2;                     // x,y 座標

                required  bool        is_right_dir  = 3         // 是否朝右 

                repeated Animal   animals = 4;               // 動物信息             

        }

          message Animal

        {

               required  uint32     id =  1;                        // 對象的唯一標識 

               required  short      type = 2;                     // 種類

               requried  short      state = 3;                    // 飢餓,生產,待收集

               optional   uint32    produced_time = 4;  // 已經生產了的時間,單位爲秒,生產狀態下有意義            

        }


       // 其他信息........

在這裏只簡單列出來田地信息的結構,其他的結構信息就不用贅述了,原則就是缺什麼就加字段,並且注意同類信息的結構複用。

       客戶端的每一次邏輯操作,都會形成操作序列,經固定間隔發送給服務器進行驗證,驗證通過後,服務器會修改存儲的數據。

       可以大概估算一下用戶登錄的時候,服務器的發包大小:

       如果用戶有60塊land,10個animalFold,30個GoodsMachine,200個NatrualObject,假設land,animalFold,GoodsMachine的字節平均大小爲40,這裏一共是100*40 = 4000字節;而NatrualObject的字節上限爲10字節(信息比較少),差不多是200*10 = 2000字節,再加上其他雜七雜八的,應該最後不超過10000字節,也就是10KB,這樣看來還不存在初始包體大小瓶頸。

       客戶端如果用cocosBuidler製作初始場景的時候,需要修改插件,使之可以導出初始邏輯地圖信息給服務器(可以是xml格式的文件,去除了表現類的屬性,比如紋理和動畫信息等)。


       欲知後事如何,請看下回分解

        

          

發佈了27 篇原創文章 · 獲贊 18 · 訪問量 80萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章