关于node.js编写微信小游戏后端

node.js完美契合微信小游戏的开发。首先,node.js是一个基于Chrome V8引擎的JavaScript运行环境,运行效率得到了极大保障。其次,node.js使用了事件驱动、非阻塞式I/O的模型。小游戏对于实时性要求很高,客户端和服务器使用websocket进行连接通信。它是一种长连接,只要一次连接,就可以一直保持连接状态,这正是小游戏所需要的。一般服务器端有一个定时器,每秒运行一次,将一些定时任务或者玩家身上状态改变及时推送给玩家。微信小游戏的客户端和服务器端通过协议来完成具体功能,例如,玩家登陆时,客户端发送登陆的请求协议,附带上玩家的身份信息(用户ID,用户名,头像,所在城市......),服务器接收请求后会向GMServer注册玩家,此时线上玩家存在于内存中,必要时候存储到MongoDB中,将请求结果发给客户端。服务器处理过程可能存在回调,返回协议要在确定服务器计算完成时候发送(注意!!!这是异步事件所导致的代码顺序和执行顺序不一致)。客户端也是采用回调函数的方式来接收服务器结果,以此确定下一步动作。每一个游戏功能可能对应一条或者几条协议,一次完整的通信需要配套的请求和响应协议各一条。当然,也有一些单向的服务器发给客户端的通知或者客户端上报给服务器的信息。

node.js采用单进程,事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。第一,单进程可以保障程序人员在编写并发操作时不用考虑进程的死锁,进程间的同步和互斥,提高开发效率。第二,单进程+事件驱动+非阻塞I/O可以使得服务器的效率最大化。微信小游戏的服务器端在有限的硬件资源前提下,能够提供更多用户连接数是至关重要的。小游戏的服务器逻辑大部分是对一些虚拟货币的加加减减,乘除都很少涉及,因此,基本不存在服务器CPU长时间占用而其他事件等待的情况。综上,node.js是小游戏后端开发的首选。

图片[1]-关于node.js编写微信小游戏后端-JieYingAI捷鹰AI

根据上图,微信小游戏的服务器端至少需要开启三个进程,GMServer、DBServer、LogServer(用户量大的情况GMServer不止一个),服务期间的通信采用websocket,将需要传递的信息写成对象字面量的形式,转化成JSON字符串进行传递,接收端解析JSON字符串,得到协议id,根据协议id对应的处理函数入口,运行对应的处理函数。协议文件服务器端和客户端开发人员各有一份,保证一致性。

Client只能和GMServer进行通信,GMServer为服务器逻辑中心区,游戏逻辑的实现都从这里经过。它包含一个重要的GMPlayerMgr模块,启动一个每秒执行一次的定时任务,与时间有关的逻辑都在这里实现。DBServer负责所有的数据库操作,与GMServer双向通信,通常一个玩家信息作为一个文档保存在MongoDB中,一些排行榜使用Redis来存储。LogServer负责以特定格式保存日志,GMServer和DBServer都可以单向调用LogServer。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享