站务联系

棋牌游戏服务器架构设计

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

棋牌游戏服务器构架设计

一,棋牌类服务器的特征

1,棋牌类不分区不分服

一般来说,棋牌游戏都是不分区不分服的。所以棋牌类服务器要满足随着用户量的提高而扩充的还要。

2,房间方式

即在同一局游戏中就是在同一个书房中,同一个书房中的人可以接收至其他人的消息。

3,每个卧室的操作应当是顺序性

这个特征类似与通常游戏的回合制,每个玩家的操作都是有顺序性的。

二,需要解决的技术点

1,数据共享

棋牌游戏服务器架构设计redis来做数据共享。

2,如何踏入书房

在同一局游戏中,我们要求所有人都在同一个书房中,我们可以规定在同一个书房中的用户棋牌服务器租用,必须登录至同一台地理服务器前面。在争创书房完成以后,其他人按照书房号查找书房的时侯,可以按照书房号,获取这个屋子所在的服务器ip跟端口,判断一个当前用户登录的服务器ip与书房所在的服务器ip是否相似,如果相似,就不做切换,如果不一样,客户端就使用ip跟端口,连接至屋内所在的服务器旁边。

3,保证屋内操作的顺序性

创建书房成功以后,接下来的操作都要保证它的顺序性,所以书房还要有一个它自己的消息个队列。我们可以把每位书房抵达服务器的消息封装为一个任务,把这个任务放在消息队列中,然后有一个任务执行者去按次序执行某些任务。

三,棋牌游戏服务器系统构架

1,功能设计

a,登陆

一般都是还要接第三方登录,登陆这一块是http操作,我们统一提供一个web服务,用来做登录验证。因为在登入时,调用第三方的http服务,这个过程或许太慢,如果放到逻辑服务器的话,可能会卡业务逻辑任务。因为或许不同的玩家业务恳求或许同在一个句柄中,如果有任务卡了,那么这个任务之后新来的恳求请会卡住,导致消息延后。

b,获取游戏公告,也置于web服务中。公告通常是游戏登录的时侯向服务器获取一次。把它放到web服务器中,与业务逻辑分离的弊端是,当业务逻辑服务器维护或更新的时侯,不影响用户的登录,和获取公告,这样用户感受会好一些。

棋牌游戏服务器架构设计

因为棋牌游戏的同步数据量比较小。一般常见的同步模式有两种:

a,客户端主动拉取。

客户端定时主动向服务器恳求一个用户的消息队列,当一个玩家有操作须要同步至其他玩家时,在服务器端先把这个消息传到这个用户的消息队列中。等待客户端的拉取操作。这种模式的弊端是,不需要考虑网路闪断或网路不好的状况,信息都是同步获取的。缺点是,定时拉取的时间间隔太短,可能不到1秒都会拉取一次。

b,服务器主动推送

当一个用户出牌的消息还要同步给其他玩家时,服务器会荣获这个玩家与服务器构建的socket连结,然后服务器使用socket 主动向客户端发送消息。

这种方法要考虑网路闪断,消息遗失的问题。因为服务器推送的消息,客户端有或许会收不到。所以客户端还要按照脉搏来辨别网路是否有断掉过,如果有断掉,需要再次从服务器拉取整个屋子状态的消息。或者按照服务器发送的消息号,如果客户端发觉接收至的服务器消息号有跳号的,比如应当接收10,却收到了12,说明后边有消息遗失,需要再次拉取整个屋子的状态信息。

这种模式的劣势是,开发复杂,需要考虑一些网路问题。优点是,只有在有消息的时侯就会推送,没有的话不推送,不占用时延等系统资源,可以降低用户同时在线量,也就是提高了服务器的承载量。

5,数据同步跟持久化

a,由于棋牌类的游戏数据少,计算量也小,所以完全可以不使用显存缓存,而直接使用redis共享显存,用户的所有数据都缓存在redis中。更新也同步更新至redis中,这样不管一个用户登录哪一台业务服务器,都能荣获自己的最新数据。

b,更新数据库,由于数据第一缓存是redis,所以活跃的用户数据都是可以从redis中直接荣获的,而不用查询数据库,所以数据库的更新可以采取异步更新,而不会产会数据的推迟。需要留意的一点是,数据的异步更新应当保证是有次序的。那么这都会形成一个问题,怎么保证用户的更新不会乱呢?

棋牌游戏服务器架构设计

1,登陆时,客户端首先向登录的web服务器恳求登录信息,登陆成功以后,返回登录的token,为了适应大规模的web恳求跟登录服务的稳定,可以使用nginx做负载均衡。

2,登陆成功以后,请求负载均衡服务器,获取一台连结的业务服务器。这个负载均衡服务器可以跟登录web在一个进程中,也可以独立下来。

3,拿到登录成功的token跟还要连结的业务服务器的ip跟端口以后,再去连结业务服务器。连接成功以后,要使用token至登入服务器去验证,这个用户是否登录了。

4,同一个书房的用户要连结至同一台地理服务器里面。在里面早已说过了。

棋牌游戏服务器架构设计

5,redis拿来做共享缓存。

6,mysql做持久化储存。

7,数据库持久化服务器,统一做数据出库操作。

五,关于网段的问题

1,网关的作用

a,转发消息包

b,业务的负载均衡,比如A业务由服务器a处理,B业务由服务器b处理,由网段进行转发。

c,维护与客户端的连结

d,带宽的整合,一般的云服务都是按订购的服务器估算码率的。通过一台服务器转发消息,可以只订购一个大码率就可以了。以节省费用。

2,棋牌类游戏还要网段吗?

我觉得不太还要,因为棋牌类游戏业务比较单一,做的最多的就是消息同屏转发。最多是再有一些任务或活动,这些由一台服务器直接处理完全可以搞定。而且开发网段只是一个复杂的工作,没必要在这个里面花很多的时间。

图说天下

×
二维码生成