NodeJs 项目开发小结

NodeJs 开发小记

有点明白为啥说有种思维方式是写作吧,就是明明想好好写突然不到如何写起,作为一个搞技术的,还是不废话,直接上内容吧

最近的区域链挺流行,带火了一波玩客猴系列的游戏,这下公司正好接了一个项目就是做一个类似的这个游戏。 一个月的开发时间,前端采用h5实现,后端考虑到发送消息的缓存维护,php不好处理,最后采用nodeJs来实现后端的逻辑功能。其实整个项目大体框架主要是公司另外一个人独立搭起来,之前也没有写过nodejs的,我就是后面加加业务代码,不过我有除了猫的基因遗传(说白了也就是位操作)没有看,其他基本都仔细看过来一便,毕竟是一个人搭建起来的,项目代码不是很多,感觉直接看大牛这样的实现也能学习到搭建框架的基础知识,不像很多历史项目,代码巨多,核心流程的看来看去的。主要是看管理的那一部分就行。

主要实现功能(一个成型的后端系统必然包括的几个方面)

  • 数据存储方面,数据库采用mysql实现数据的增删改查
  • 猫咪的遗传算法(这里其实是最简单的位运算操作实现,xx位表示猫的某个部位,以此类推);
  • 网络方面(websocket协议 实现采用socket.io)
  • 日志方面(没有采用任何日志库,自己实现的,就是简单的仿照Google的glog库的格式)
  • 业务方面 (就是采用js的语法 没有嵌入其他语言[感觉这条是废话哈])

主要的框架

首先还是贴一下项目目录 ,这个对一个有经验的程序员还是比较能有条理的:

src
├── config.json
├── index.js
├── insert.sh
├── log
├── mod
│ ├── client
│ │ ├── client.js 一个客户端实例
│ │ └── clientMgr.js 管理客户端实例的集合
│ ├── config
│ │ └── main.js 实现读表的逻辑
│ ├── const
│ │ └── main.js 常量的统一定义
│ ├── genes
│ │ ├── main.js 猫的基因操作
│ │ └── statis.js
│ ├── msg
│ │ ├── cmd.js 消息号定义
│ │ ├── msg.js 消息协议定义 json格式
│ │ └── retCode.js 消息的错误码定义
│ ├── mysql
│ │ ├── account.js 账号表
│ │ ├── feedback.js 反馈表
│ │ ├── feed.js 猫的喂养表
│ │ ├── flow.js 流水表
│ │ ├── freeze.js 冻结资金表
│ │ ├── kv.js
│ │ ├── leaseMarket.js 出租市场表
│ │ ├── main.js
│ │ ├── op.js 操作记录表
│ │ ├── order.js 订单表
│ │ ├── pets.js 猫的信息表
│ │ ├── petsLooks.js 猫的外观
│ │ ├── petsPhote.js 猫的图片
│ │ ├── sellMarket.js 售卖市场表
│ │ ├── sqlDefine.js
│ │ ├── test.js
│ │ └── user.js 用户表
│ ├── net
│ │ ├── server.js 服务的建立
│ │ └── socket.js socket实例
│ ├── order
│ │ └── main.js 订单逻辑
│ ├── part
│ │ ├── base.js 基本信息
│ │ ├── feed.js 喂养信息
│ │ ├── flow.js 流水信息
│ │ ├── freeze.js 冻结资金信息
│ │ ├── lease.js 出租信息
│ │ ├── market.js 市场信息
│ │ ├── pets.js 猫的信息
│ │ └── sample.js
│ └── util
│ ├── idMaker.js 唯一id生成(采用递增形式)
│ ├── logger.js 日志模块
│ └── main.js 一些工具函数的定义
├── orderCheck.js 模拟订单的交易进行
├── package.json 这里可以对项目需要的库进行添加,在新部署的时候 npm install –save 即可nodejs即可完成对库的安装
├── res
│ └── xlsx 放各种资源 比如策划表
├── sys.js 内部跑的生产0代猫
└── www
├── index.html 是测试网页
└── market.html

  • 数据存储模块
    采用的实现,很是方便load数据,不多讲,贴一个例子:
function createTable() {
    var AccountModel        = sequelize.import(process.cwd() + '/mod/mysql/account');
    var BaseModel           = sequelize.import(process.cwd() + '/mod/mysql/user');
    sequelize.sync();
    Logger.log('createTable DONE');
}
  • 日志模块 这里实现还是比较简单的, 不过貌似我自己没有搜寻到类似的,不知道另外一个大牛怎么找到的,不过在此我贴出实现代码如下
Object.defineProperty(global, '__stack', {
    get: function(){
        var orig = Error.prepareStackTrace;
        Error.prepareStackTrace = function(_, stack){ return stack; };
        var err = new Error;
        Error.captureStackTrace(err, arguments.call);
        var stack = err.stack;
        Error.prepareStackTrace = orig;
        return stack;
    }
});

Object.defineProperty(global, '__line__', {
    get: function(){
        return __stack[4].getLineNumber();
    }
});

Object.defineProperty(global, '__filename__', {
    get: function(){
        return __stack[4].getFileName();
    }
});
// 这样相当于在全局定义了新的俩个属性 ,可以直接调用
 console.log('[' +__filename__+':'+__line__ + '] '); //即可打印出当前的文件和行数,方便debug


  • 业务方面 不多说 其实也只是简单的增删改查。
  • 网络方面

这个其实写的也比较简单,没有使用任何库,主要是学习下作为服务器如何管理多个用户的连接吧。
话说服务器不就是做这个事情的嘛,底层通讯的问题一般都使用成熟的库,在此是socket.io 作为现在程序员要做的,基本上学习网络通讯库的api使用,主要还是管理多个连接问题嘛,底层的通讯一般都不需要程序员自己写了,也没必要花那些精力和时间,不过必要的了解原理还是需要的,不然没使用的出的bug,就不要无处判断了。

你可能感兴趣的:(nodeJs,mysql)