站务联系

MMO游戏服务器从零开发(架构篇)

发布时间:2021-03-10   来源:网络整理    
字号:

MMO游戏服务器属于大型多人在线游戏服务器,负载游戏服务器,稳定,效率(包括反馈推迟跟开发效率)是这些服务器基本要求。

本人从10年入行迄今仍然从事MMO游戏的研制跟构架设计工作,对此类服务器有一些理解跟想法。下面分享给想了解游戏服务器开发的朋友们。这些是本人这些年来对MMO服务器构架设计的小结的分享。本人会从头开发一套完整的MMO服务器构架程序。并在构架的基础上实现基本的游戏Demo功能。虽然也是构架,但是完全可以支持线上项目的研制。本人是实操中成长上去的,不会花哨的语言修饰。都是真枪实弹的code。

开发语言选择:

本人参与C++服务器构架开发5年,后转Java,发现Java愈发适宜游戏服务器的研制。优点如下:

MMO游戏服务器从零开发(架构篇)

5、跨平台问题。就说Window跟Linux,C++撰写的代码在不同的平台要有两份实现。就只是网路部份window的Iocp,linux的Epoll就是两种实现。其他的函数库,两个平台还有不同,都要进行处理。对于Java,就一个虚拟机,在window还是在linux都是运行在虚拟机之下,只要有Java虚拟机,管你是何种系统。

模块介绍:

虽然也是服务器构架,但是麻雀虽小,五脏俱全。先整体介绍一下MMO服务器还要的基础组成部份,让你们有一个整体的认识。

MMO游戏服务器从零开发(架构篇)

基础组件:

1、网络组件:包括网段通讯模块跟内网通讯模块。还有合同部份。

2、数据库组件:负责玩家数据跟全局数据的持久化。

3、日志组件:包括异常日志(代码异常复印日志)和行为日志(为营运平台提供的行为日志)。

MMO游戏服务器从零开发(架构篇)

场景逻辑:玩家的所有操作基本都属于场景逻辑句柄组的。玩家的穿行,战斗,道具荣获,使用。系统服务线程组提供的系统服务基本都是通过RPC读取的形式为场景逻辑组句柄提供服务。比如添加好友,场景逻辑句柄上的玩家收到添加好友消息,然后通过Rpc的方法读取系统服务器线程组的好友服务实现添加好友功能。但登录服务做了特殊处理,登陆消息会直接分发至登入服务,登陆服务进行验证游戏服务器,验证通过后会在场景服务线程组争创对应的角色通讯对象实现与客户端的通讯处理。

进程界定:

之前做C++的时侯,一般都把进程都可以界定为登录进程,网关进程,游戏逻辑进程,数据库进程,日志进程,平台进程。但转Java后,发现启动多进程反倒启动麻烦。由于服务器构架整体都是多线程构架,就没有做细腻的进程界定,我们的服务器可以全部都开在一个进程上,也可以分开启动。我们近期上的项目就是所有功能都在一个进程启动,开服第一天开了10几组服务器,由于导量的不均匀,导致首服数量非常火热,最初设置的最高在线数量初始都是3000人,最后将首服调整为5500人。因为软件都是试用云服务器,足够的大显存,cpu,完全没有必要分开进程启动,多进程反倒会消耗更大的显存跟cpu,单进程多线程更优。运维启动也更方便。

PS:本文是从整体至部份的实现方法,所以难免有部份细节介绍或许存在一些疏漏或则问题。希望你们可以及时反馈,本人后来也会再发觉问题更改本文的部份内容。

图说天下

×
二维码生成