一 概述
游戏服务器的本质就是基于长连接的socket服务器。 它利用socket通讯来实现服务器与客户端之间的交互。事实上有不少游戏是直接基于原生socket来开发的。
相对于简单的socket服务器,它承受着更加繁重的任务:
- 后端承载着极复杂的游戏逻辑。
- 网络流量与消息量巨大,且实时性要求高。
- 通常一台socket服务器无法支撑复杂的游戏逻辑,因此往往使用一个服务器集群来提供服务。
游戏应用只能使用长连接,原因如下:
- 通讯的双向性,游戏应用不仅仅是推拉模式,而且推送的数据量要远远大于拉的数据量
- 响应的实时性要求极高,一般游戏应用要求推送的消息实时反应,而实时响应的最大时间是100ms。
二 场景分区
游戏交互跟玩家所在地图(场景)上的位置关系非常大,如两个玩家在相邻的地方可以互相PK或组队打怪。这种相邻的交互频率非常高,对实时性的要求也非常高,这就必须要求相邻玩家在分布在同一个进程里。于是就有了按场景分区的策略,即一个进程里可以有一个场景,也可以有多个场景。
这种实现带来了游戏的可伸缩性受到场景进程的限制,如果某个场景过于烦忙可能会把进程撑爆,也就把整个游戏撑爆。场景服务器是有状态的,每个用户请求必须发回原来