2023-11-20
pinus通常简单实用,功能全面,具有高可扩展性、可扩展性等优点,这与其技术选择和方案规划密不可分。在分析许多游戏引擎设计理念的前提下,结合过去的游戏开发经验,确认了pinus架构设计方案。
node.js自身的优势与服务器的惊人一致。 在node.在js官方定义中, fast、scalable、realtime、network满足服务器的需求。服务器是网络密集型的应用,对即时性有很高的要求,而node.js在网络io上的优势也可以完全满足这一点。应用node.汇总js开发服务器的优点:
一个真正高度可扩展的游戏运行架构必须是多进程的。googlegritsgame, mozila的browserquest 都使用了node.js作为服务器编程语言, 但它们都使用了单个过程的node.js服务器,缺乏扩展,这使得它们能够支持的在线用户数量非常有限(这两款游戏通常被用作HTML5游戏的demo)。多流程架构可以很好地完成服务器的扩展,从而支持更多的在线客户,降低服务器的压力。

表明: 上图中的格子表示过程, 定义相当于“服务器”
从表面上看,游戏的操作架构与web的操作架构非常相似。conector类似于web使用的apache/nginx等web服务器,后端服务器组类似于web应用中的网站服务器(如tomcat)。但实际上有很大的区别:
游戏的运行结构非常复杂,要想支撑如此复杂的运行结构,就必须有一个结构来简化开发。
pinus就是这样一个架构,它让我们使用最少的编码, 为了实现复杂的运行架构,最清晰的结构。
pinus framework的构成结构如图所示:

在web应用中, 每个服务器都是无状态、对等的, 开发人员不需要根据架构或器皿管理服务器。
但是游戏应用程序不同, 游戏可能需要包括多种不同类型的服务器,每种类型的服务器也可能有不同的数量需求。这就要求架构抽象解耦服务器,适用于服务器类型和数量的扩展。
客户端的要求和响应与web应用相似, 但是架构是基于长连接的, 实现模式不同于http要求。
广播是服务器最频繁的操作, API必须方便, 而且能达到极致。
虽然架构尽量减少跨过程的启用,但过程之间的通信是不可避免的, 因此,需要方便实用的RPC架构来支撑。
* 应用架构松耦合,可插拔。
应用的扩展非常重要, pinus framework适用于component插入所有第三方组件, 还支持添加自定义路由规则, 自定义filter等。
以下是对这三个目标的详细分析:
该架构抽象了服务器, 抽象分为两类:前服务器和后服务器, 如图:

前面服务器(frontend)的职责:
后端服务器(backend)的职责:
动态语言的面向对象有一个叫做家鸭的基本要素。
云服务器抽象也可以比作家鸭, 云服务器对外界面只有两种, 一是接受客户端的要求, 叫handler, 一是接受RPC要求, 叫remote, handler和remote的行为决定了服务器的外观。
所以我们只需要定义handler和remote两种动作, 这个云服务器的类型可以确定。
所以我们只需要定义handler和remote两种动作, 这个云服务器的类型可以确定。使用与服务器对应的目录结构, 云服务器抽象可以快速实现。
以下是示例图:
图中的connector, area, chat三个目录代表三种服务器类型, 每个目录下的handler和remote都取决于这个云服务器行为(对外界面)。 开发者只需在handler和remote目录中填写编码, 某种服务器可以实现。这使得服务器实现起来非常方便。
移动服务器, 只需填写一份环境变量serversers.json可以让服务器快速移动。
具体环境变量内容如下:
所有web应用框架都实现了抽象的要求和响应。虽然游戏应用是基于长连接的, 但是抽象的要求和响应与web应用非常相似。
下图中的编码是request要求的例子:

根据Conventionnn的要求,请求的api与web使用的ajax非常相似 over configuration的原则, 不需要任何设备。 如图所示,请求route字符串:chat.chatHandler.send, 它可以将要求分发到chathandler文档在chat服务器上定义的send方式。
requestfilter系统、广播/组播系统也在Pinus框架中实现。详见pinus架构参考。
服务器之间的通信主要通过底层RPC架构实现,RPC架构主要解决了路由和RPC底层通信协议的选择两个问题。
RPC在服务器之间的启用也实现了零配备。如图所示:案例:

RPC插口定义在上图的remote目录中: chatRemote.js,其插口定义如下:
RPC启用只需通过以下插口即可实现其他服务器(RPC客户端):
该启用程序将根据特定的路由规则转发给特殊服务器。(比如场景服务请求会根据玩家在哪个场景立即转发到相应的server)。(比如场景服务请求会根据玩家在哪个场景立即转发到相应的server)。

component是pinus自定义部件,开发者可以自载入自定义component。
在pinus架构参考中,component将进行更深入的探讨。
以下是component的生命周期图:

使用者只需完成component相关界面: start, afterStart, stop, 可载入自定义部件:
上面的应用框架形成pinus framework的前提。在此基础上,开发服务器将非常方便,配合pinus提供的游戏开发库和相关工具集。在此基础上,开发服务器将非常方便,配合pinus提供的游戏开发库和相关工具集。 后面的tutorial将带我们进入开发游戏应用的实际案例。