Node.js 网关+集群分布式游戏服务器总结

这篇文章主要是这近一个月复习node.js知识的理论总结,在学完之后奎斯使用node.js模仿这种模式自己写了一套五子棋联机小游戏(还差几个小模块就能全部完成).

一、什么是网关+集群式

众所周之,游戏开发与网站开发最大的区别之一就是,游戏服务器是一种交互性极强的长连接网络服务,不像网页这种请求之后就断开的短链接,为了保证网络不被断开,或者出现客户端断开,服务器就停止运行这种情况,就引入了网关服务器。

网关服务器做为多个游戏服务器之间交互的中介者,网关服务器除了担任数据包转发的任务,还负责服务器数据的校验、网络的安全(提防黑客攻击),分流等等(类似于网站中负载均衡服务器那种)。

网关在接受客户端的数据包之后,将不同的数据转到不同游戏服务器,这里直接贴上奎斯画的全局图:

Node.js 网关+集群分布式游戏服务器总结

这里中心服务器担任用户个人信息相关服务与数据库进行交互,当然不同游戏架构不同,有的也会有多个数据库和多个服务器进行交互,而游戏服务器担任玩游戏中的相关服务,系统服务器担任比如每日签到,奖励发放等等。

有些稍微大点的游戏为了减少负载压力,也会采用多网关+多服务器的方式,比如一些RPG游戏,根据游戏区的多少分多个网关去处理。

 

二、数据传输:

由于node.js是采用JS语言,开发游戏服务器起来也是大大降低了门槛,不像其他c++那样麻烦,并且由于node.js天然的异步API很容易做到高并发,在node.js中传输协议用得比较多的比如websocket、tcp/ip、http等等,其实webscoket底层是基于tcp进行了一层封装而成的一种双全工通信协议,tcp/ip协议也就是net模块是node.js是自带的,ws模块属于第三方包需要通过npm进行下载。

这里稍微解释下两者的区别,使用tcp协议就需要自己对数据包进行分包、粘包等操作,而使用webscoket它在底层已经帮你把这些全部做好,所以使用起来也非常方便,在奎斯的五子棋中就是用的webscoket协议。

 

三、数据编码:

在数据包的编码方面,主要是两种:

  1. JSON编码
  2. 二进制编码

这两种数据包的区别是JSON易开发,一次写好,多次复用,但编码后数据包体积较大,二进制编码之后数据包非常小,但开发比较麻烦,每条命令都需要自己编码。

还有一个就是数据的加密,一般用md5哈希算法,node.js自带的模块,引入后直接使用就可以了。

 

奎斯学习服务器开发没多久,这是对目前所学知识的简单总结,游戏服务器的水很深,还有如帧同步、状态同步等等许多复杂的知识需要学习。

 

感谢阅览奎斯文章,学生党一枚,如有错误欢迎大佬批评指正。