首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从事游戏后台开发?有哪些学习路线和方法?

如何从事游戏后台开发?有哪些学习路线和方法?

本人在校大学生,喜欢专研,看了很多经典的大头书,就比较想从事后端的工作,加之自己也喜欢玩游戏,所以以后从事游戏后台开发工作,但身边人没有这方面经验,真心求教各位了。学习路线有哪些,注意事项有哪些,谢谢各位了。

谢邀,看到题主的问题描述,我看到自己当初的影子,顿时有感而发,这里我想先给题主服务端的一些基本认识,然后再谈谈学习路线和方法。

游戏服务端大体可以分为以下几个部分:

1、网络层

负责客户端和服务端,以及服务端集群内部之间的网络数据包收发,目前在游戏中广泛应用的两种协议,一种是TCP协议,还有一种则是HTTP协议。一般而言,那些网络数据包交互频繁的游戏采用TCP会更合适,比如MMORPG,而一些客户端和服务端交互不频繁的弱联网游戏,则采用HTTP协议,这些游戏一般以客户端为主,且通常防范作弊的能力有限。

数据包交互频繁的游戏,大多采用TCP协议,然而对于手游来说TCP却未必是最好的选择,TCP最大的特点,首先是按序到达,超时重传,此外TCP协议还有流量控制和拥塞控制。

这里我对拥塞控制做一下简要说明,虽然TCP设计拥塞控制的初衷是,通过控制发送方往网络注入字节序的数量,来缓解拥塞,也就是说,如果发送方多次发送数据包都没收到确认,则判定为网络拥塞,此时TCP的滑动窗口可能会减少到原来的一半,而恢复往往却很慢,那些对网络有着苛刻要求的Moba类游戏来说,TCP可能就没那么友好了。因此有些项目会采用UDP协议来传输数据包,虽然UDP无连接的,可能会导致丢包,但是可以在应用层加以控制,实现一套TCP like协议,UDP是用户报文协议,基本上应用层下传多少数据包,就会发送多少数据包,应用层需要实现UDP包的超时重传和按序到达等机制,在遇到网络拥塞时,仍然不会让数据包的发送量减半,因此能够有效缓解网络传输问题。

上一段是网络协议在游戏上的一些应用的概述,对于服务端而言,网络层模型也是需要了解的,目前常用的是epoll模型,典型的使用情形是,服务端进程开一条socket线程,并且将包括监听、读取和发送事件在内的所有事件交给epoll来处理,在没有事件时,epoll_wait会阻塞socket线程,当有事件过来时,则唤醒socket线程进行相应的事件处理,此外,要网络层还需要进行分包和粘包处理,将数据包收齐以后再转给业务层。

虽然不深入去研究网络层,也不妨碍你写业务逻辑,但是研究还是对你有益处的。

2、协议层

这里的协议层和网络协议并非一个概念,游戏客户端和服务端在进行数据包交互的时候,往往需要将游戏内存中的数据结构,转成网络字节序,才能通过网络发送到另外一端。而这个转化的过程发送端要遵循一个序列化的规则,而接收方则需要需要遵循一个反序列化规则,遵循规则才能将数据转成网络字节序,传输,然后在另一端还原,这些被共同遵循的规则,则是协议。比较知名的序列化,反序列化的库是Google的Protobuf。

3、存库机制

游戏中,玩家的操作比较频繁,涉及的数据变更也很频繁,如果每次都要进行写库,那么会导致游戏服务器的性能极具下降,因此,一般的游戏设计是,玩家的操作都是基于内存的,并且定时将数据写库,从而减缓数据库的压力。

存库的方式,这里比较推荐用大blob的方式,比如将玩家所有的数据序列化为json字符串,然后作为blob存入数据库中,这样做的好处是,开发过程中,可以做到变更玩家存储结构而不用修改数据表。

4、逻辑层架构

对于逻辑层架构,不同的游戏有不同的设计,这里就不举例说明了,不过大体上,都需要思考以下几个流程

1)启服关服流程:这一点很重要,在游戏进行停服维护时,要确保玩家以及和玩家相关的数据均落地以后,才能够杀进程,关服流程需要作出这种保证。

2)玩家登录登出流程:这也是一个比较容易出问题的流程,比如是否允许玩家在两个端同时登录服务器,如果允许如何避免数据被相互覆盖,导致玩家数据错乱等问题,如果不允许,如果改玩家实例已经在线,要不要踢下线?是立刻踢,还是发送一个延时踢的指令,并且这段时间内操纵这个实例的客户端所有请求均会被拒绝,并且给请求登录的玩家返回一个不能登录的错误码?这些都是需要考虑的问题,而且是需要慎重考虑。

3)容灾、扩容机制:对于高可用的服务端集群来说,7*24小时地进行运作,难免有时候会出一些状况,比如某个进程挂掉了,对于这种情况,我们需要有一种容灾的机制,保证进程宕掉,不会轻易地就要重启整个集群。如何设计扩容机制,直接影响到,当玩家大量涌入时,将部分玩家分流到新开的进程内,并且不影响原来的玩家?这些都需要考虑,虽然不难,但是需要慎重考虑

4)游戏同步机制:不同的游戏,会采用不同的同步机制,不过最典型的就是状态同步和帧同步,如果题主没有了解过,可以去找找资料研究一下。

5)配置机制:这点无需多言,只要将策划的配置表,转成程序中可用的文件格式即可。

学习路线

以上是我对游戏服务端的一些理解,至于学习路线

网络层方面:精读《计算机网络(谢希仁著)》《TCP/IP详解》打好理论基础,同时可以结合《Unix网络编程》作为实践。

协议层方面:可以去Google的Protobuf官网看看其用法和说明。

数据库:说起来惭愧,我并没有看过很多关于数据库的著作,不过《Redis设计与实现》这本不错,很多人推荐,至于MySql,题主可以网上找找。

此外,选择一个成熟的服务端框架,也是非常重要的,最好不要自己写,我推荐云风的skynet,有时间可以多看看框架的源码,去理解人家的设计思路,开发思想,绝对是大有裨益的。多上网找找开源的demo来研究,然后自己手写一些demo,实践很重要。

自学服务端还是很辛苦的,需要自己写客户端,自己写服务端才能够跑起一套流程,还是做单机“简单一些”。虽然实际工作中,服务端要比客户端轻松一些,囧

最后,也是最重要的一点,就是要勤于总结才能快速进步。

就说这么多了,保持住你的热情,多玩玩游戏,祝你学习进步

注:baidu网盘文件总是被删,我重新生成了链接,你们试试,再不行给我后台留言吧,我也很无奈啊~~

Unity3D游戏开发主程,入门游戏开发必备!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180223G0M53J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券