1.1 每走一步都有事情发生
从玩家的角度来看,一款网络游戏大都会涉及如下流程:
1)打开游戏,客户端向服务端发起网络连接。
2)玩家输入账号密码,经过验证后,进入游戏场景。
3)操作交互,比如行走、打怪、购买道具等。
4)下线退出游戏。
在此过程中,藏在幕后的服务端做了很多事情,那究竟做了哪些?此服务端系统又是如何开发的呢?下面一起来看看。
1.1.1 走路的五个步骤
从玩家的视角来看,整个游戏系统如图1-2所示,多个客户端通过网络与服务端相连,服务端处理网络请求,存储角色数据。
图1-2 服务端像个黑盒子
说明:为了统一术语,本书中“玩家”代表玩游戏的人,“客户端”代表玩家接触的游戏程序,“角色”代表玩家控制的游戏角色。
客户端和客户端之间通过服务端间接通信。例如在MMORPG中,角色A移动一步,玩家B会在自己屏幕中看到角色A的位置变化,“走路”的背后至少发生了表1-1所示的5件事情。
表1-1 “走路”背后发生的事情
这5件事情如图1-3所示,其中标注的①到⑤分别对应表1-1中的各个步骤。
图1-3 位置同步的5个步骤
1.1.2 服务端视角的游戏流程
在服务端的“眼里”,“走路”只是它生命里的一小部分。游戏启动,每个客户端都会有连接、登录中、游戏中、登出中和退出五个阶段。如图1-4所示,图中纵轴代表客户端的状态,方框表示该状态下执行的操作。
连接阶段:客户端发起网络连接,双端可以通信,但服务端还不知道玩家控制的是哪个角色。
图1-4 服务端视角下的游戏流程
·登录中:客户端发送登录协议,协议中包含账号、密码等信息,待检验通过后服务端会将网络连接与游戏角色对应起来,并从数据库中获取该角色的数据(比如金币数量),此后才算登录成功。
·游戏中:双端互通协议,玩家可以移动、打怪、购买道具。1.1.1节介绍的位置同步就是发生在这个阶段。
·登出阶段:玩家下线,服务端把角色的数据保存到数据库中。对于保存角色数据的时机,不同的游戏会有不同的处理方式。比如,有些游戏采用定时存储的方式,每隔几分钟把在线玩家的数据写回数据库;有些游戏采用下线时存储的方式,即只有在玩家下线时才保存数据。
了解了这些知识后,如果想开发一个游戏服务端,该从哪里着手呢?