网页游戏架构心得(一)

首先非常感谢Saint,跟他交谈收益颇多

 

有关服务器的数据架构,可以分为服务器本地内存+Memcached+DB这三块

1、和客户端交互数据的就是服务端的本地内存了,这个速度是最快的,所以交互也是最频繁的(本地内存数据只保存自身服务器的数据)

2、Memcached作为本地内存的备份数据,同时还提供了分布式服务器的数据共享(Memcached保存着所有服务器的数据)

3、DB作为Memcached的备份数据,当从Memcached取不到数据时可以从DB中获取

 

用户登录的时候先尝试从Memcached中获取 如果获取到就从Memcached中放入本地内存,如果获取不到就从DB中获取之后再放入Memcached和本地内存

然后每隔一段时间(例如5分钟)将本地内存同步到DB

用户下线的时候,本地内存同步到Memcached和DB,然后把本地内存中的用户信息删除

 

其中本地缓存的读取速度是最快的,并且保存的是当前服务器的在线用户信息,数据量也比较小,所以交互的是最频繁的;Memcached其次(因为需要socket交互),而且Memcached保存着所有服务器的用户信息;DB的瓶颈最大,所以交互的最少。这样以上的架构可以保证性能分配的最大化

 

根据Saint的经验之谈,一个游戏服务器的同时在线人数大概在1100左右,一台物理服务器大概放3个游戏服务器,也就是3300人左右。当然,这个取决于物理服务器的处理速度,也就是服务器硬件配置,我们按普通的服务器来算的。

不过计算物理服务器的硬件配置再高,一个游戏服务器的同时在线人数也不能太多,因为同一张地图在线玩家超过600,客户端就会比较卡了。

 

至于数据库,可以3、4个游戏服务器用一个DB,然后根据表名进行最基本的水平切分

 

Memcached物理服务器,只要内存足够大,就可以放所有服务器的用户信息。

可以一个游戏服务器对应Memcached的一个端口,至于每个端口要分配多少内存,就根据实际的玩家数量了,大概1G内存可以放2000个玩家的信息。

不同的游戏最好对应不同的端口,以免其他游戏的数据异常影响导致端口进程挂掉

不过要注意的是,在Windows下只能开一个端口,在Linux下才能开多个端口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一地图管理:(MapManager 包) 这个包下有很多的类用于地图上的管理。包括基础类Map,功能加载地图, Map 类下有以下的方法: 实现方案: 方案1.元素构成的地图 二.道具管理(ItemManager 包) 这个包是负责角色的使用物品包括道具(),武器(攻击) ,装备(防御) 三.声音管理(SoundManager 包) 这个包负责声音的特效,加载,卸载,场景音乐播放停止暂停,调整音量大小, 获取音量大小,还有一些显示的问题 四.角色管理(CharacterManager) 这个包负责创建不同的主角和配角,包括创建角色,设置角色属性,获取角色属性, 删除角色,分派角色的常见行为和技能等,设置怪物Ai。写一个接口或者建议基类共享角 色中的属性和方法(当创建主角和创建怪物的时候,也一样可以使用这样方法); 制作使用的设计模式: Strategy 模式; 工厂模式; 单例模式; 外观模式. Decorator 模式: 五.事件管理(GameEvent 包) 划分不同的情节,用不同的类来描述情节。包括不同的任务。 初步想法:写出不同的事件,每一个事件就关于一个故事情节,引发场景动画,引发一些 对白言语等等; 八.通信管理(CommunionManager 包): socket 通信,连接服务器,读取服务器的数据。读取和写入数据库; 打斗时候的各种情况记录 网络游戏中最重要的一个地方,这个关于通信的是影响到游戏是否能够顺利进行。 九.操作管理(ControlManager包): 用于设定游戏的操作键盘,和鼠标,实现与键盘鼠标进行交互管理用户输入的数据 十.游戏管理(GameManager包): (暂定) 包括游戏设定,音乐大小开关,场景特效开启调整画面质量等。查看个人信息、技能 表、自动保存问题,玩家在游戏中状态(包括时间的统计) 基本方法 GameSave();//游戏保存的问题。当玩家在游戏中死了的时候,应该如何去保存当前的数据 SoundOn(); //游戏开关全局 //画面质量,高,中,低 十一游戏Ai管理(AiManager 包 这里包括一套关于Ai 的算法机制,初步的一些想法: 包括一些有限状态机的设计模型,或者在有限状态机基础上去加入随机性去。 深入的技术:神经网络,包括BP 算法 共32页PDF

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值