公司新闻
棋牌游戏服务器的架构规划需求留意哪些点
来源: 作者: 发布时间:2018-08-30 14:52 浏览量:

以下内容从棋牌类效劳器的特色;需求处理的技能点;体系架构;效劳器架构;关于网关的问题这五个方历来详细为咱们解说棋牌游戏效劳器的架构规划中的一些问题。

棋牌游戏效劳器的架构规划需求留意哪些点

一、棋牌类效劳器的特色

1、棋牌类不分区不分服

一般来说,棋牌游戏都是不分区不分服的。所以棋牌类效劳器要满意跟着用户量的添加而扩展的需求。

2、房间形式

即在同一局游戏中就是在同一个房间中,同一个房间中的人能够接收到其他人的音讯。

3、每个房间的操作有必要是次序性

这个特性相似与一般游戏的回合制,每个玩家的操作都是有次序性的。

二、需求处理的技能点

1、数据同享

由于棋牌类游戏不分区不分服,咱们在规划效劳器的时分,是按国际服的思想去规划,即效劳器是一个n多台物理机的集群。当用户登陆效劳器,创立房间时,可能依据负载均衡算法,它能够在任何一台效劳器上面。所以,不论用户登陆到哪一台效劳器上面了,都能够取得自己的数据。咱们能够运用redis来做数据同享。

2、怎么进入房间

在同一局游戏中,咱们要求一切人都在同一个房间中,咱们能够规定在同一个房间中的用户,有必要登陆到同一台物理效劳器上面。在创立房间完结之后,其他人依据房间号查找房间的时分,能够依据房间号,获取这个房间地点的效劳器ip和端口,判别一个当时用户登陆的效劳器ip与房间地点的效劳器ip是否相同,假如相同,就不做切换,假如不相同,客户端就运用ip和端口,衔接到房间地点的效劳器上面。

3、确保房间操作的次序性

创立房间成功之后,接下来的操作都要确保它的次序性,所以房间需求有一个它自己的音讯个行列。咱们能够把每个房间抵达效劳器的音讯封装为一个使命,把这个使命放到音讯行列中,然后有一个使命履行者去按次序履行这些使命。

三、体系架构

1、功能规划

登陆。一般都是需求接第三方登陆,登陆这一块是http操作,咱们一致供给一个web效劳,用来做登陆验证。由于在登陆时,调用第三方的http效劳,这个进程可能很慢,假如放在逻辑效劳器的话,可能会卡事务逻辑使命。由于可能不同的玩家事务恳求可能同在一个线程中,假如有使命卡了,那么这个使命今后新来的恳求请会卡住,导致音讯推迟。

获取游戏布告,也放在web效劳中。布告一般是游戏登陆的时分向效劳器获取一次。把它放在web效劳器中,与事务逻辑别离的优点是,当事务逻辑效劳器保护或更新的时分,不影响用户的登陆,和获取布告,这样用户体会会好一些。

创立用户仅有的id,由于棋牌类游戏效劳器是国际服,无分区,所以用户的id有必要是大局仅有的。能够运用redis的incr办法,原子的递加,假如不想被他人依据userid的递加计算出有多少注册用户,递加的梯度能够随机,比方每次递加的值从1到1024中随机一个。

创立房间,当房间主创立房间时,房间的id需求在任何台效劳器上能够查询到,所以创立房间成功后,房间id要存储在同享内存redis中,每个房间id对应一个房间地点的ip地址或效劳器id.这样,当有用户要进入房间,在查询房间id时,可能判别这个房间是否和自己登陆的游戏效劳器相同。

查找参加房间。依据房间id查询房间,查找到房间后,获取房间地点的ip地址或效劳器id,假如发现和自己所登陆的效劳器相同,直接能够参加房间。假如不相同,把这个房间地点的ip和端口回来给客户端,让客户端从头与房间地点的效劳器树立衔接,运用登陆时的token验证用户。

游戏脚本调用。在验证游戏是否合法时,客户端与效劳器都要验证,验证的算法是相同的,所以能够运用脚本来写,写一份脚本,在效劳器与客户端中一起运用。能够运用lua。同一个算法运用同一个脚本 ,这样在开发新的同类型棋牌游戏时,只需求替换一下这个脚本就行了,不必再重复开发。

2、后台办理体系

这个一般是依据运营需求开发的,每个公司不相同。不过有一点,后台办理体系可能要和游戏效劳器通讯,这种通讯方法最好是选用redis的订阅/发布机制。这样能够把某个音讯事情一起发送到一切的事务效劳器上面。依据用户地点的效劳器进行处理。

3、玩家同屏

玩家同屏是棋牌游戏中的一个要点,关于做过那些大型的arpg,或mmo游戏的程序员来说,这并不是什么难事。由于同屏就是效劳器对客户端的音讯进行转发。一个房间四个人,一个人出的牌或操作能被其他三个人一起看到。

由于棋牌游戏的同步数据量比较小。一般常见的同步方法有两种:

1、客户端自动拉取