正文
这种服务器架构和我们常用的 web 服务器架构差不多,也是采用 Nginx 负载集群支持服务器的水平扩展,memcache 做缓存。唯一的不同点在于通信层需要对协议再加工和加密。一般每个公司都有自己的一套基于 HTTP 的协议层框架,很少采用开源框架。
长连接游戏和弱联网游戏不同的地方在于,长连接中,玩家是有状态的,服务器可以时时和 client 交互。数据的传送,不像弱联网一般每次都需要重新创建一个连接,消息传送的频率以及速度上都快于弱联网游戏。
第一代网游服务器(单线程无阻塞)
最早的游戏服务器产生于 1978 年。英国著名的财经学校 University of Essex 的学生 Roy Trubshaw 编写了世界上第一个 MUD 程序,叫做《MUD1》。
《MUD1》程序的源代码在 ARPANET 共享之后,在全世界广泛流行起来。不断完善的 MUD1 的基础上产生了开源的 MudOS(1991),成为众多网游的鼻祖。
MUD1 是一款纯文字的游戏,没有任何图片,但是不同计算机前的玩家可以在游戏里共同冒险、交流。与以往具有网络联机功能的游戏相比,MUD1 是第一款真正意义上的实时多人交互的网络游戏。
它最大的特色是能够保证整个虚拟世界和玩家角色的持续发展——无论是玩家退出后重新登录还是服务器重启,游戏中的场景、宝箱、怪物和谜题仍保持不变,玩家的角色也依然是上次的状态。
MudOS 使用单线程无阻塞套接字来服务所有玩家。所有玩家的请求都发到同一个线程去处理,主线程每隔 1 秒钟更新一次所有对象(网络收发,对象状态,刷新地图,刷新 NPC)。
用户使用 Telnet 之类的客户端,通过 TCP 协议连接到 MudOS 上,使用纯文字进行游戏,每条指令用回车进行分割。这样的系统在当时每台服务器承载 4000 人同时游戏。从 1991 年的 MudOS 发布后,全球各地都在为它改进,扩充,推出新版本。
MudOS 中游戏内容通过 LPC 脚本进行定制,逻辑处理采用单线程 tick 轮询,这也是第一款服务端架构模型,后来被应用到不同游戏上。后续很多游戏都是跟《UO》一样,直接在 MudOS 上进行二次开发。直到现在,一些回合制游戏,以及对运算量小的游戏,依然采用这种服务器架构。
第一代服务器线程模型如下:
第二代网游服务器(分区分服)
2000 年左右,随着图形界面的出现,游戏更多地采用图形界面与用户交互。此时随着在线人数的增加和游戏数据的增加,服务器变得不堪重负。于是就有了分服模型。分服模型结构如下: