当前位置:   article > 正文

从卡牌类游戏初探游戏服务器_卡牌游戏服务端

卡牌游戏服务端

游戏服务器与普通服务器有什么区别呢?如果你想了解游戏开发,这个问题你一定思考过。它们之间的区别包括数据的实时性、交互性、并发性等区别,而且对于不同类型的游戏,服务器之间的差异也很大。这里以弱交互类型为例,就是建立HTTP短连接的游戏服务器类型。这类型的游戏不需要进行实时连接和实时计算,例如:部分卡牌游戏、横版卷轴如跑酷、部分回合制游戏、天梯积分奖励等,它们注重客户端的玩家体验。而对于实时网络对战的游戏,如MMORPG或者需要低延迟的游戏,如射击类游戏等都需要实时连接,这时候需要有状态的连接方式。

对于卡牌游戏它既可以是弱连接也可以是强连接,比如三国杀和游戏王可以用弱连接,炉石和昆特牌等也可以做成强连接。它们通常采用混合连接,比如在PVP时使用强连接,在排行榜和买卖道具等交互性不是特别强的地方使用弱连接。我们可以通过游戏客户端表现来判断联网类型(针对PVP模式):

  • 战斗过程中,选择内容偏多,内容偏长;

  • 战斗允许预先放置卡牌和预先连锁判断;

  • 客户端使用网页形式来制作。

还有一些特定情况可以作为判断依据:没有及时交互过程、刷新排行榜、买卖道具等等。

所以这里的弱连接,指无状态的服务器,可以理解为短连接服务,比如HTTP,所有的状态只在传输过程中完成,服务器不会记录客户端的任何状态,没有上下文之间的关联。

以自走棋的PVP模式为例,玩家先摆放好牌型,在点击确认后,客户端将数据传到服务器进行逻辑处理和计算。然后服务器将计算结果告诉客户端,客户端通过计算结果或步骤,渲染动画和战斗结果呈现给玩家。

服务器将结果内容传给客户端后就会断开连接,排行榜的推送及积分计算、道具的选择和购买,这些基本使用弱连接。对于弱连接的安全性,可以在服务器登录时使用时间戳或者特定随机值的哈希值用作前后端通信的key进行加密,这样每次交互时不需要再次加密,时间戳或者特定随机值的不同保证每次登录的key不同。

对于联网的游戏都需要处理消息,最常见的方式是轮询处理。轮询根据具体业务需求可以大致分为三种:定时轮询、按需定时刷新、伸缩式刷新。所谓伸缩式刷新,就是客户端和服务器约定好一个初始刷新时间,比如30秒刷新一次,当消息缓存过多或者过快时,缩短刷新时间;当消息变少时,服务端告知客户端延长时间。伸缩式刷新实现了将资源浪费开销减少到最低限度。

这种方式可以应用到游戏中的聊天室,假设使用弱连接方式,客户端A向客户端B发消息,客户端B每隔30秒询问一次服务器有没有A的消息,如果没有达到阈值不需要修改刷新时间;当B连续N(阈值)拿到A的消息,服务器会通知客户端B调整时间为20秒。如果B这时下线且服务器判断B短时间内不会上线,则A发送过来的消息不会被放入内存,而是存放到数据库中,待B上线后再将消息发送给B。

以上都是在说无状态的服务器,但对于市面上火爆的游戏大多是有状态服务器,也就是高实时高并发的服务器,即必须保持客户端与服务器间的长连接。对于长连接服务器需要满足以下需求:加解密实时校验、状态校验、心跳测试、缓存等,并且通常使用TCP/IP协议建立长连接。连接一旦断开,用户属性等信息需要重新获取。

个人公众号:才浅的每日python。欢迎来交流

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/64873
推荐阅读
相关标签
  

闽ICP备14008679号