游戏服务器与普通服务器有什么区别呢?如果你想了解游戏开发,这个问题你一定思考过。它们之间的区别包括数据的实时性、交互性、并发性等区别,而且对于不同类型的游戏,服务器之间的差异也很大。这里以弱交互类型为例,就是建立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。欢迎来交流

从卡牌类游戏初探游戏服务器相关推荐

  1. 当年的三国java游戏_三国卡牌类手游塞班 分享问几年前玩的一个三国

    分享问几年前玩的一个三国卡牌手机游戏,好像是塞班...分享问几年前玩的一个三国卡牌手机游戏,好像是塞班,或者安卓的,单机的...是塞班的,之前也玩过.里面有霹雳车,攻城云梯,什么的.骑兵,枪兵,盾兵, ...

  2. 卡牌类手游源码 刀塔传奇 免费分享 基于cocos2d-x3.0引擎开发

    卡牌类手游源码 刀塔传奇 免费分享 基于cocos2d-x3.0引擎开发 https://bbs.wxrym.com/thread-90118-1-1.html (出处: 外星人源码论坛) 今天给大家 ...

  3. cocos 卡牌类_优质链游大爆发,Cocos-BCX版《恶龙必须死》有什么特别之处?

    作者 | 拜占庭骑兵 审稿 | @NowGame 出品 | 比特魔方 近期沉寂了许久的链游引来一波新游上线.有日流水几十万人民币的<ChainZ Arena>,活跃度前排的<加密三国 ...

  4. [Unity3D]卡牌游戏中有关卡牌类的制作

    文章目录 展示卡牌 卡牌展示效果 打出卡牌 敌人释放技能 需求 制作 流程 抽牌: 弃牌: 一些问题 抽牌 查看卡牌 查看抽牌堆 查看弃牌堆 卡牌效果的实现 还没学到设计模式,所以自己和同学捣鼓了一个 ...

  5. 卡牌手机游戏基于HTTP协议的服务端设计方案

    背景: 手机游戏平台服务端设计目前主要有基于Socket的状态连接和HTTP无状态连接两种架构.由于手机用户对于网络流量的敏感和网络状态的变化要比PC环境要复杂,因而对于卡牌类游戏基本采用HTTP连接 ...

  6. 【cocos2dx】卡牌记忆游戏(2)——游戏场景

    首先,我们需要触摸事件,其次,我们要给游戏计时,因为时间要刷新,我们还需要update函数.计时功能我们写了一个计时器的类,所以有个计时器成员.游戏场景里要装有若干卡片,为了能够获取他们,我们需要一个 ...

  7. php手游服务端开发教程,【手游服务端】梦想海贼王 卡牌系列一键端服务端游戏源码+教程...

    [手游服务端]梦想海贼王 卡牌系列一键端服务端游戏源码+教程 游戏介绍: <梦想海贼王>是一款卡牌类手游,游戏以全球第一超人气动漫<海贼王>为题材,用Q版风格配合新奇多样的玩法 ...

  8. 卡牌游戏源代码(原创)(控制台)

    游戏预览: 完成度90%,约3000行,过年这几天全用在这上面了 由于尚未学到QT等,因此只能在黑窗口下面制作了 未完成的部分: ①战斗代码未优化(800行,精简后应该能降到200行左右) ②关卡掉落 ...

  9. 卡牌游戏战斗系统的设计和实现一

    本文转载供自己学习查阅 卡牌游戏战斗系统的设计和实现一 http://www.lxway.com/4418844882.htm 战斗系统是是卡牌类游戏的一个核心模块,可以说其他的模块都是为此提供服务, ...

  10. 计算机卡牌培养游戏,2020好玩的放置卡牌养成类游戏推荐 卡牌放置 轻松养成

    放置卡牌养成类游戏是很多的玩家很喜欢的游戏的类型之一,在放置卡牌养成类游戏中玩家可以体会到不同的乐趣,下面小编就来介绍几款好玩的放置卡牌养成类游戏,感兴趣的小伙伴一起来看看吧. 1.高能手办团 高能手 ...

最新文章

  1. php 挂马 密码123456,admin密码-常用密码加密md5值,123456,admin,admin888
  2. Exp2 后门原理与实践 20164323段钊阳
  3. Python使用文本拼图
  4. 分布式服务框架 dubbo/dubbox 入门示例
  5. select 和epoll模型区别
  6. python做词典_Python实现创建字典
  7. python flag 参数_flag_flagpython_js开关flag - 云+社区 - 腾讯云
  8. php单独输出每个单词,PHP:在特定短语/单词之后搜索文本文件并输出
  9. golang panic: assignment to entry in nil map(map赋值前要先初始化 - map的初始化及使用 )
  10. 2010年中国企业500强
  11. 基于C语言的菜鸟驿站管理系统
  12. allan方差 imu_基于RWTLS的Allan方差算法简化
  13. WPS文字无法创建对象,请确认对象已在系统注册表注册的问题
  14. mysql优化join_MySQL-巧用Join来优化SQL
  15. element ui自定义图标
  16. 埃米,音译为埃,符号为Å,1Å等于10^(-10)m,即纳米的十分之一
  17. Opencv 基础(三):使用OpenCV裁剪图像
  18. WZOI-237猜猜谁是冠军
  19. 关于有刷直流电机,你需要了解这些
  20. 洛谷5197 USACO Grass Planting

热门文章

  1. 根据GFF3文件统计外显子大小和数量以及内含子大小
  2. 牛客HTML专项练习【错题+知识点辨析】(持续更新中)
  3. 如何取消计算机上的公式,评估公式并从单元格中删除公式(Evaluate formula and remove formula from cell)...
  4. 家庭NAS方案-树莓派安装使用OpenMediaVault
  5. 全网首发Modown主题8.31开心版
  6. 台湾大学林轩田机器学习基石课程学习笔记16(完结) -- Three Learning Principles
  7. [转]漫谈个人知识管理-PKM的方法
  8. 用python解“计算工资”题
  9. oracle先决条件内存,oracle11g安装客户端检查先决条件失败
  10. Linux查看gzip文件原始大小,Linux 文件管理:Linux gzip 压缩