手游服务端开发基础概念扫盲篇

原创 2016年09月13日 16:17:29

13年毕业后,做了一年半web开发,因为受不了在客户现场工作的氛围,愤然辞职。转行做了一名手游服务端开发。

在广州,据我所知,选择java作为服务端开发语言的大厂大概有37玩,百田,银汉,易娱等等。其实游戏服务端开发语言可说是百花齐放,c++、java、python、elang,不一而足。

记得刚入坑的时候,我连策划数据和玩家数据都傻傻分不清,服务进程还天真地认为是tomcat启动的。被策划与测试联手虐待了近3年后,我终于成为一名有经验的“业务狗” (=。 =

下面说一下手游开发中碰到的一些名词。这些概念都是自己理解的。刚入坑的朋友可以草率看一看,瞧一瞧。资深游戏开发请留下联系方法,方便请教问题。(^-^)

架构是简单的服务器架构,也就是说,大部分业务处理都是在同一个进程。没有分布式服务的概念。

996

提起游戏公司,比较受众人认可的便是它高强度的工作时间。从刚开始的996制度(每天上午9点上班,晚上9点下班,中间休息2个小时,每周6个工作日,到后来的9106,甚至9116,简直是残暴剥削从业者的剩余价值啊。不过,不加班的游戏公司估计也没多少人敢去上班,工资能不能按时发都是未知数了。也许有些人会说,游戏行业工资高,奖金多。说点心里说,虽然游戏行业普遍工资是比较高,但综合工作时间考虑,性价比奇低。近几年来,手游行业发展迅速,每年都有非常多的手游工作室成立,当然,也有很多手游公司倒闭。总体来说,手游这块大蛋糕已被市场瓜分所剩无几,特别是腾讯和网易两个大厂就拿了七成左右。利润减少,人力成本增大,导致很多手游项目的奖金已悄悄地被砍掉了,大部分项目成员最多就是年底拿个双薪。(=。=)

策划数据与玩家数据

简单说来,策划数据就是游戏的规则,是由策划配置的。玩家数据就是玩家在游戏过程中产生的用于持久化状态的数据,需要保存在数据库里。关于策划数据,有一点需要说明的是,策划数据是不能被代码修改的。一般说来,当服务进程一启动的时候,所有策划相关数据都会被load进内存。一些新手在开始做业务功能的时候,经常发生代码不小心修改到策划数据,导致游戏规则被无意修改了。这种情况对游戏的影响非常严重,一旦出现,必定会被老大狂屌。当然,策划职位也有可能填错数据。曾经有项目因为策划不小心把投放XX个银币填成XX个钻石,短时间就发生了严重后果,据说后来数据是采用“回档”残暴解决。

pve与pvp

简单来说,pve(player vs environment),就是玩家与电脑ai对战,包括各种关卡、副本等;pvp(player vs player),就是玩家与玩家之间真枪实火地对战。一个游戏,如果只有纯pve,是不能长期吸引玩家的,毕竟打电脑打多了就会没意思。pvp一般都是一个游戏的核心玩法,也是最不好设计的,要综合平衡网络延迟及战斗表现。时下很流行的一款休闲游戏“贪吃蛇大作战”倒是挺有意思的,明明是一款单机游戏,居然能作出类似联网对战的效果。一开始,我还在惊讶于它的及时同步如此之屌,玩家的一个扭头能够及时同步到其他玩家的屏幕。然后,我试着把网络给断了,一切依旧运行得那么完美!!整个游戏除了排行榜分数是定时刷新的之外,其他都是在本地客户端跑,不过,能把ai做得这么逼真,却是非常有料的。

Socket服

游戏主进程,游戏的所有业务逻辑都在这里执行。维持着所有在线用户的socket链接。一般是采用多线程来处理用户的请求。

网关

网关就是用于服务端与客户端进行通信。跟socket服在同一个进程。用户请求从客户端发出之后,来到服务端,服务端经过业务逻辑处理,把数据返回给客户端。网关做的事情就是处理发包,解包,以及各种粘包情况。网关代码一般都非常复杂,一旦稳定就不会轻易修改。业务代码一般不需要跟网关打交道。

登录服

现在大部分游戏都是分成很多个小区,以便在单进程的环境里容纳更多的玩家同时在线。客户端手机通过渠道sdk验证后,就需要在登录服中根据平台与角色id找到玩家所在的服务分区。登录服一般是web项目,客户端通过http请求,查询玩家所在服务区的ip地址以及端口信息。有了socket地址后,客户端就可以直连socket服,完成登录逻辑。

gm工具

gm工具对于一款上线产品来说,具有不可或缺的重要性。既可以实现诸如开服关服之类的运维命令,又可实现提供给客服人员的查询玩家信息的接口,也可以辅助管理游戏进程,实现动态修改游戏逻辑的黑科技(热更新)。总体来说,GM工具类似于游戏的金手指,可以提供各种“作弊操作”和游戏管理操作。

热更新

对于一个上线产品项目来说,热更新为维持项目的稳定健康提供了坚强的保障。小到策划数据的修改,代码bug的修改,大到动态扩展游戏业务功能。试想一下,没有热更新机制,如果需要修改程序的一个小bug,都不得不踢人停服维护。这样的事情来多一发,恐怕老玩家都被撵走了。比较有意思的是,我先前的一个项目,每次更新当日,一定少不了代码热更或者数据热更,两年里的每一个星期都是如此,从无例外。可见热更新的重要性了。关于热更新的机制及方法,我的博客里有两篇文章可以参考。

防挂

做游戏后台与做web后台,关于防挂的防御思想是一致的。不管客户端发什么请求上来,即使是客户端已通过自己的验证,服务端都需要对请求参数进行有效性验证。总不能说,客户端说可以兑换100个物品,服务端什么验证都不用,就给角色加了100个物品。一定要有这样的思想,客户端完全可以通过修改包数据(加密只能提高破解难度不能杜绝)来自定义请求参数,服务端直接处理来自客户端请求的接口方法一定要有完善的参数验证机制。写的方法能否防得住挂,是区分一个初级业务狗和资深业务狗的重要标志。

用户数据持久化

玩家的数据需要保存到数据库,如果一下线数据就被重置,那么玩家每天练级还有什么意义。比较主流的数据持久方式有两种,一种是针对每一个功能模块都建一张表,只要有一个userId作为外健能关联到User主表即可;另外一种是不区别逻辑分表,对User类的所有依赖实体(包括实体及其递归依赖),全部映射成字符串或者二进制。两种做法都有优缺点。逻辑分表的优点是模块分层定位清晰、可读性强、容易通过sql修正玩家数据等;缺点是新建模块必须手动建表,实体字段必须增加表属性才能完成持久化。实体映射的优点是,只需一张表即可完成全部数据的持久化、新建属性实体或字段不需要额外修改表结构;缺点是可读性差,如果存为二进制的话更无可读性可言,而且修复玩家数据只能通过修改程序内存而不能直接执行sql语句。

另外一方面,由于数据库连接的资源非常可贵,不可能玩家每一个请求都需要load用户表。一般都是玩家登录的时候就将玩家相关的用户表全部load进内存。服务端有一个定时器检测,当玩家在一段时间内没有发请求上来,认为该玩家已经下线,相应的数据再回写到数据库。这样实现的话,对数据库的压力就变小了很多,而且在很短的时候内频繁上线下线也不会触发多次读取数据库。

游戏更新与维护

手游的更新节奏是比较频繁的,每周一更,每两周一更,最长的周期应该是每个月一更了。很多游戏喜欢把更新时间设在深夜或者凌晨,目的是想避开高峰时期,争取更长的开放时间,这可苦了我们这些做游戏的人了。无数次晚上加班到两三点或者早上6点就得赶往公司,往事不堪回首。游戏的服务器一般都是部署在Linux系统,所以常见的Linux命令都会熟悉。


最后,写给即将走进游戏服务端大坑的朋友们的心里话。游戏开发这个职位虽然外表华丽,个中的辛苦与苦逼只有局中人才能理解。如果两年后发现自己还在辛勤写着活动业务逻辑,从未碰过大型功能玩法(例如跨服赛事,战斗同步等),那你应该好好思考一下,自己是否适合继续从事游戏开发,或者这家公司值不值得你继续留下来。如果有志往资深游戏开发的路走下去,建议研究一下分布式游戏开发。毕竟,这年头,分布式还是很前沿,逼格很高的玩意。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

二级指针的作用详解

一、概念 在如下的A指向B、B指向C的指向关系中: 首先 C是"一段内容",比如你用malloc或者new分配了一块内存,然后塞进去"一段内容",那就是C了。C的起始地址是0x00000008。 B是...

网络游戏服务器开发(一)

在开发过程中,会先有一份开发大纲或是一份策划案,但是这些在我的开发中可能不会有,或者即使有,也很有可能是我随性写下来的,但是我会尽可能写好它。网络通信层,我会放到单独的SOCKET编程中去讲解,这里的...

手游服务器开发技术详解

从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术。(以下所指游戏服务器更偏向于手游,因为我对端游...

google protobuf学习笔记二:使用和原理

一.什么是protobuf protobuf全称Google Protocol Buffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。它和XML或者JSON差不多,...

手游基本框架的介绍

本文是看到《乐元素CTO凌聪访谈:游戏引擎技术选型之王道》这篇文章后,我觉得还是挺有道理的,其他也说出了一些手游的基本框架,对于小白来说,还是挺有概念价值的。但是说到实际,概念归概念,到最后能写出代码...
  • cbbbc
  • cbbbc
  • 2015-04-20 14:25
  • 1251

编程路上,对于迷失者的一些小小建议

前几天,在半梦半醒中写了一篇《编程路上,送给处于迷茫中的你和自己》,没想到还挺受欢迎,同时收到了一些朋友的留言和感谢,意外之余也挺开心。大多人都会经历的迷茫其实这也都难免的,现在计算机技术更新那么快,...

游戏开发的艰辛历程与升级展望

从第一款游戏《贪吃蛇》开始,到《水果忍者》、《时空猎人》,再到如今风靡全国的《王者荣耀》,手机游戏迎来了百花齐放的繁华时代。怀着对游戏行业的热爱,一批一批游戏开发大军加入了队伍。即使从业道路很艰辛,我...

化妆品加盟方案 法国欧瑞妮

【46条足以震撼你的生活小常识 】1、常吃宵夜.会得胃癌. 因为胃得不到休息 2、一个星期只能吃四颗蛋.吃太多.对身体不好 3、.鸡屁股含有致癌物, 不要吃较好 4、饭后吃水果是错误的观念. 应是饭前...

无语

下个东西搞这么麻烦

游戏架构设计的一些整理

一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块。这里说的模块可以指一个进程,或者一个线程方式存在,本质...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)