Code Prettify

Thursday, July 3, 2014

一些關於 node.js 的分享

之前在用node.js寫game server
每當有新的model(資料格式)
也需要寫一個class去封裝(encapsulation)

例如寫完player這款model後
需要添加player的itemBag,用作儲存player的所有物品

這些model的功能大多都包括 定義 / 讀取 / 寫入 資料庫
有不少的重複性

為了提高效率
於是設計了一套格式,方便加入新的model


這套格式使用了以下插件
  • node-cache
    • 用作暫時儲存資料到記憶體,避免頻繁的資料庫讀/寫
  • knex
    • 用作簡化生成sql statement
  • node-mysql
    • 用作連接mysql 資料庫


格式結構


scheme.js 定義所有資料格式
schemeMgr.js 使用node-cache儲存指定scheme的實體資料
schemeModel.js scheme的model實體
實作了insert、update、load單一model的功能
schemeListModel.js scheme list的model實體
實作了insert、update、load多於一款model的功能(使用一個SQL 指令)

格式例子

Scheme Model

  player : {
    param : {
      id : 0,
      name : 'defaultName',
      lv : 1,
      exp : 0,
      coin : 0,
      gold : 0
    },
    cache : {
     stdTTL : 300,
     checkPeriod : 300,
     saveIfExpired : true
},
    db : {
     tableName : 'player',
     onCreateTable : function(table) {
      table.increments('id');
      table.string('name');
      table.integer('lv');
      table.integer('exp');
      table.integer('coin');
      table.integer('gold');
     }
    },
  },

param就是model的模版
產生Scheme Model時會整個複製過去
因為javascript 是weak typing的關係
怎樣定義結構也都可以

 cache是node-cache使用的參數
stdTTL(standard time to live),即物件的在記憶體內的生存時間
checkPeriod是node-cache每隔多久去檢查物件的生存時間
saveIfExpired若是true,在過期的時候會update到資料庫

我作過unit test,如物件過了生存時間但未被檢查
若嘗試從node-cache提取物件 會強制檢查一次
所以不會拿到過期的物件 

db內就是跟資料庫有關的
onCreateTable是knex開設新table時的callback function

Scheme List Model

  itemBag : {
   param : {
    id : 0,
    playerID : 0,
    itemID : 0,
    count : 0
   },
   cache : {
     stdTTL : 300,
     checkPeriod : 300,
     saveIfExpired : true
   },
    db : {
     tableName : 'player',
     onCreateTable : function(table) {
      table.increments('id');
      table.string('playerID');
      table.integer('itemID');
      table.integer('count');
     }
    },
    keyList : {
     playerID : 0
    }
  }
};

Scheme List Model 只比 Scheme Model多了一個 keyList
是在讀取/寫入 資料庫時使用的key


使用這個格式,只需要幾行就可以新增一款model
省了很多 read/write 資料庫的code
更省了很多很多unit test 的code
既方便又快捷 :)


3 comments:

  1. 裸聊直播間-真愛旅舍視頻聊天室-真人秀視頻聊天室-同城午夜免費交友網站
    裸聊直播間-真愛旅舍視頻聊天室-真人秀視頻聊天室-同城午夜免費交友網站
    真人裸聊秀場-午夜聊天室真人秀場-真愛旅舍視頻聊天室
    真人裸聊秀場-午夜聊天室真人秀場-真愛旅舍視頻聊天室
    台灣一對一視頻聊天室-午夜真人秀視頻聊天室-台灣免費視訊聊天室
    台灣一對一視頻聊天室-午夜真人秀視頻聊天室-台灣免費視訊聊天室
    台灣一對一視頻聊天室-寂寞交友富婆聊天室-台灣免費視訊聊天室
    台灣一對一視頻聊天室-寂寞交友富婆聊天室-台灣免費視訊聊天室
    台灣一對一視頻聊天室-台灣免費視訊聊天室-同城午夜一夜情交友網站
    台灣一對一視頻聊天室-台灣免費視訊聊天室-同城午夜一夜情交友網站
    台灣甜心真人裸聊-免費裸聊聊天室-聊天室真人秀視頻-在線聊天室
    台灣甜心真人裸聊-免費裸聊聊天室-聊天室真人秀視頻-在線聊天室
    台灣甜心真人裸聊-台灣辣妹視訊聊天室-免費午夜真人秀視頻聊天室
    台灣甜心真人裸聊-台灣辣妹視訊聊天室-免費午夜真人秀視頻聊天室
    免費同城聊天室-色情真人秀場聊天室-同城寂寞交友網-聊天室你懂的
    免費同城聊天室-色情真人秀場聊天室-同城寂寞交友網-聊天室你懂的
    台灣免費視訊聊天室-網愛聊天室-台灣ut聊天室-在線聊天室
    台灣免費視訊聊天室-網愛聊天室-台灣ut聊天室-在線聊天室
    真愛旅舍視頻聊天室
    真愛旅舍視頻聊天室
    真愛旅舍視頻ut聊天室
    真愛旅舍視頻ut聊天室
    真愛旅舍視頻聊天室-夫妻真人秀視頻聊天室-午夜聊天室
    真愛旅舍視頻聊天室-夫妻真人秀視頻聊天室-午夜聊天室
    台灣一對一視頻聊天室-台灣免費視訊聊天室-同城午夜一夜情交友網站
    台灣一對一視頻聊天室-台灣免費視訊聊天室-同城午夜一夜情交友網站
    台灣免費視訊聊天室-台灣辣妹視訊聊天室-聊天室你懂的
    台灣免費視訊聊天室-台灣辣妹視訊聊天室-聊天室你懂的
    台灣免費視訊聊天室-台灣色情視訊聊天-免費午夜聊天室
    台灣免費視訊聊天室-台灣色情視訊聊天-免費午夜聊天室

    ReplyDelete