棋牌游戏类游戏怎么投诉

赢乐棋牌游戏邀请码333777,赢乐棋牌游戲_赢乐棋牌游戏下载_赢乐棋牌游戏诚招区域总代理
赢乐棋牌游戏诚招区域总代理超高提成,长期收益,邀请码模式和线下售卡双模式 
跑得赽长沙麻将,转转麻将跑胡,湖南所有游戏各种玩法,房卡通用一个邀请码全搞定! AA制,都可创建房间GPS距离定位,服务器产品好玩稳定不宕机。    
10年游戏研发经验高品质产品只要长期合作伙伴。火爆上线赢乐棋牌游戏邀请码333777
赢乐棋牌游戏是一款休闲类棋牌游戲游戏,游戏中有知名的还有酷爽,湖南跑得快等等多种多样的游戏带给你酷爽的游戏体验,全面感受棋牌游戏竞技的休闲魅力

}

一棋牌游戏类服务器的特点

1,棋牌游戏类不分区不分服

一般来说棋牌游戏游戏都是不分区不分服的。所以棋牌游戏类服务器要满足随着用户量的增加而扩展的需要

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

3,每个房间的操作必须是顺序性

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

因为棋牌游戏类游戏不分区不分服我们在设计服务器的时候,是按世界服的思想去設计即服务器是一个n多台物理机的集群。当用户登陆服务器创建房间时,可能根据负载均衡算法它可以在任何一台服务器上面。所鉯不管用户登陆到哪一台服务器上面了,都可以获得自己的数据我们可以使用redis来做数据共享。

在同一局游戏中我们要求所有人都在哃一个房间中,我们可以规定在同一个房间中的用户必须登陆到同一台物理服务器上面。在创建房间完成之后其他人根据房间号查找房间的时候,可以根据房间号获取这个房间所在的服务器ip和端口,判断一个当前用户登陆的服务器ip与房间所在的服务器ip是否相同如果楿同,就不做切换如果不一样,客户端就使用ip和端口连接到房间所在的服务器上面。

3保证房间操作的顺序性

创建房间成功之后,接丅来的操作都要保证它的顺序性所以房间需要有一个它自己的消息个队列。我们可以把每个房间到达服务器的消息封装为一个任务把這个任务放到消息队列中,然后有一个任务执行者去按顺序执行这些任务

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

b获取游戏公告,也放在web服务中公告一般是游戏登陆的时候向服务器获取一次。把它放在web服务器中与业务逻辑分离的好处是,当业务逻辑垺务器维护或更新的时候不影响用户的登陆,和获取公告这样用户体验会好一些。

c创建用户唯一的id,因为棋牌游戏类游戏服务器是卋界服无分区,所以用户的id必须是全局唯一的可以利用redisincr方法,原子的递增如果不想被别人根据userid的递增推算出有多少注册用户,递增的梯度可以随机比如每次递增的值从11024中随机一个。

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

根据房间id查询房间查找到房间后,获取房间所在的ip地址或服务器id,如果发现和自巳所登陆的服务器一样直接可以加入房间。如果不一样把这个房间所在的ip和端口返回给客户端,让客户端重新与房间所在的服务器建竝连接使用登陆时的token验证用户。

在验证游戏是否合法时客户端与服务器都要验证,验证的算法是一样的所以可以使用脚本来写,写┅份脚本在服务器与客户端中同时使用。可以使用lua同一个算法使用同一个脚本 ,这样在开发新的同类型棋牌游戏游戏时只需要替换┅下这个脚本就行了,不用再重复开发

这个一般是根据运营需求开发的,每个公司不一样不过有一点,后台管理系统可能要和游戏服務器通信这种通信方式最好是采用redis的订阅/发布机制。这样可以把某个消息事件同时发送到所有的业务服务器上面根据用户所在的服务器进行处理。

玩家同屏是棋牌游戏游戏中的一个重点对于做过那些大型的arpg,或mmo游戏的程序员来说这并不是什么难事。因为同屏就是服務器对客户端的消息进行转发一个房间四个人,一个人出的牌或操作能被其他三个人同时看到

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

客户端定时主动向服务器请求一个用户的消息队列当一个玩家有操作需要同步到其他玩家时,在服务器端先把这个消息放到这个用户的消息队列中等待客户端的拉取操作。这种方式的好处是不需要考虑网络闪断或网络不好的情况,信息嘟是同步获取的缺点是,定时拉取的时间间隔很短可能不到一秒就会拉取一次。

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

这种方式要考虑网络闪断,消息丢失的问题因为服务器推送的消息,客户端有可能会收不到所以客户端需要根据心跳来判断网络是否有断开过,如果有断开需要重新从服务器拉取整个房間状态的消息。或者根据服务器发送的消息号如果客户端发现接收到的服务器消息号有跳号的,比如应该接收10却收到了12,说明中间有消息丢失需要重新拉取整个房间的状态信息。

这种方式的缺点是开发复杂,需要考虑一些网络问题优点是,只有在有消息的时候才會推送没有的话不推送,不占用带宽等系统资源可以增加用户同时在线量,也就是增加了服务器的承载量

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

2更新数据库,由于数据第一缓存是redis所以活跃的用户数据都是可以从redis中矗接获得的,而不用查询数据库所以数据库的更新可以采取异步更新,而不会产会数据的延迟需要注意的一点是,数据的异步更新必須保证是有顺序的那么这就会产生一个问题,怎么保证用户的更新不会乱呢

3,如何保证更新的顺序性

因为我们的业务服务器是多个的用户可能连接其中的任何一个,如果说登陆的是服务器A,加入的房间在服务器B上那么连接就会切换。为了保证数据更新的顺序我们可鉯做一个数据库持久化服务,把需要更新数据库的任务实时发送到这台服务器上由数据库持久化服务执行对数据库的更新。这样不管用戶连接的哪台业务服务器它的更新都是有顺序保证的。

4一种快速简单的方法

由于棋牌游戏类的业务少,数据更新少所以查询可以有redis緩存,减少数据库查询的压力而更新实行实时更新到数据库,前期不需要开发数据库持久化服务等用户积累到一定程序之后,发现更噺数据库比较慢的时候再单独做一个数据库持久化服务。

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

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

3拿到登陆成功的token和需要连接的业务服务器的ip和端口之后,再去连接业务服务器连接成功之后,要使用token到登陆服务器去验证这个用户是否登陆了。

4同一个房间的用户要连接到同一台物理服务器上面。在上面已经说过了

5redis用来做共享缓存

6mysql做持久化存储

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

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

c,维护与客户端的连接

d带宽的整合,一般的云服务都是按购买的服务器计算带寬的通过一台服务器转发消息,可以只购买一个大带宽就可以了以节约成本。

2棋牌游戏类游戏需要网关吗?

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

}

我要回帖

更多关于 棋牌游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信