人的身份总是复杂的,然而人的本质往往是简单的。在这方面我有一项自以为然的理论:一个人的本质是什么,并不取决于他的身份与地位,而是取决于这人在闲暇时所想的最多的事情是什么。
比如说一个警察,闲暇时想的最多的是他的女儿,那他的本质就是个父亲;一个教师,闲暇时想的最多的是下一顿饭吃什么,那他的本质就是个吃货。
由此检验我自己,我闲暇时会在产品层面解构应用程序与游戏,会在编剧角度解构影视剧,有时还会理一理所读小说的剧情结构,很少去考虑程序方面的事情,可见本质并非程序员。
虽已放话“30天零基础搭建游戏服务器”,然而“游戏服务器”究竟是个什么玩意,由哪些部分构成,我其实还是两眼一抹黑的。
依据常识推测,从软件开发的角度上说,游戏服务器首先是一种程序。既然是程序,肯定是跑在操作系统里的。常见的操作系统无非三种,Windows、Unix和Linux。服务器多使用Linux系统。
Unix与Linux两种系统似乎大体上差不多,而Mac正是Unix的子集。于是Mac电脑是绝佳的服务器开发机。
至于服务器的构成,只好从客户端的角度来类推。我知道,游戏客户端程序的构成无外乎三个部分:游戏逻辑、游戏数据、动画呈现。游戏逻辑和游戏数据都放在本地,就是单机游戏;放服务器,就是网络游戏。
那么游戏服务器至少应该具备游戏逻辑处理与游戏数据存储这两大功能。当然,还有通信功能。
游戏数据存储方面,肯定是用数据库来实现。数据库有两大类,关系型数据库和非关系型数据库,也就是SQL和NoSQL。
从诞生时间上说,SQL是老东西,NoSQL是新东西。我喜欢新东西。
从数据结构上说,SQL是二维表结构,NoSQL是key-value结构。我习惯面向对象的思路,把数据对象解析成key-value要比解析成二维表要容易得多。
从性能上说,NoSQL在高并发读写方面更有优势。
于是选用NoSQL数据库无疑。
NoSQL数据库常用的就三个,Mongodb、Redis以及Memcached。Redis和Memcached都是内存数据库,读写效率很高,然而数据持久化和数据查询方面没什么搞头,于是需要用Mongodb做数据持久化,另外搭配一个内存数据库当缓存。
就选用Mongodb+Redis的组合好了。
为什么不用Mongodb+Memcached呢?
因为Memcached的官网太丑了。
当然Redis有中文网站也是一个微小且不起决定作用的原因。嗯。