《百万在线》罗培羽:服务端入门不该陷进网络编程

 

刚毕业到游戏公司工作时,项目组用了纯C++技术方案,主管丢给一本400+页的《TCP/IP详解》,说啃完它就算入门了。可是对于毕业生而言,看这种书就像在看字典,看了很久也写不出有实际意义的程序。又记得有新人问某大神服务端该怎么学,大神把Linux源码翻出来告诉新人把源码看懂就行了。显然,新人会学的很痛苦。

下面这张图本意是以制造汽车的步骤来类比产品经理的迭代思维,它也能用来类比客户端和服务端的学习过程。对于客户端,入门后就可以制作demo、参加gamejam,每一步学习都能够做出点东西——只是简单和复杂的区别。服务端不一样,要全面掌握好网络编程、数据库、多线程等等多方面知识,才能写出基本能用的程序,学习路径很长,过程也很枯燥。

服务端和客户端的成长路径

 

我们经常能够听说某某大神自己做了一款单机游戏,放上steam、taptap获取好评,却很少听说某某大神自己做了一款网络游戏。这是因为开发网络游戏的工作量要比单机游戏大的多,而且服务端还不太好学。

现状:不再绕进网络编程的旋涡

上古时代,学习客户端编程也很艰难,要从opengl、directX等图形API学起,学很久才能够写出玩具级别的程序,很枯燥;随着游戏引擎的发展,现在大家会先学Unity或虚幻4引擎的使用法,后期再去深入学渲染,降低了学习客户端的门槛。

游戏公司带服务端新人,也遵循类似“游戏引擎”的路径,项目组会有一套较为成熟的服务端代码,新人先在这套代码上写功能,后期再逐步的深入去做优化、修改底层。边学边做,一步步有产出,才符合游戏公司对人才的要求。不仅仅是游戏,Web后端也有类似“游戏引擎”的发展趋势,一些常见的模块会被抽象成“基础设施”,开发者站在巨人的肩膀上,开发越来越复杂的功能。

游戏服务端的重点,在于和游戏有关的部分,比如符合游戏业务的拓扑结构是什么样的?实体同步有哪些方法?怎么做断线重连?角色、场景的数据结构怎么设计?如何解决热更新问题?等等。而像网络编程、线程调度应该由成熟的“基础设施”去解决。

尽管游戏公司已经遵循“边学边做,一步步有产出”的技术成长路线,然而市面上不少服务端教程仍把重点放在操作系统、网络编程,读者就算认真读完,也只能写出玩具级别的程序,陷入了旋涡。

所以一直在想,能不能有一本教程,就是按照游戏公司带新人的路径来组织。下图是书籍早期的一张内部宣传图,体现了《百万在线》的设计,就是希望将入门阶段最需要的知识呈现出来,让学习有“性价比”,花最少的时间学到最实用的,立马就能够上手做项目。而不是写一本像字典一样的书。

随着学习的深入,啃大块头、看源码还是很必要的,但每个阶段的侧重点应有不同。按照这个思路,2017年10月,我写下了第一版的目录,而后又试写了一些章节。

抉择:没有统治地位的游戏后端引擎

书中第一章有句话“先不择手段(用现成的库)把游戏做出来,再深入了解”,这个理念贯穿着书籍第一部分,“做出来”是重点。然而“不择手段”要用哪个手段?

如果是编写客户端的书籍,那便很简单,无非在Unity和UE引擎中二选一,然编写服务端,却很难抉择。

游戏业界并没有一套游戏服务端方案能占据统治地位,意味着无论选择哪个引擎来讲解,都无法覆盖大部分读者;而如果不选择一个引擎,那依然会掉进“网络编程的旋涡”,因为要花一大半篇幅讲基础。到了2019年10月,我必须在下面的三个方案中做出抉择。

方案1:c++和lua方向,前一半介绍用C++和lua实现服务端底层的方法,内容包括分布式模型、线程调度、网络连接、数据存储、脚本和热更新等方面。后一半介绍逻辑实现,内容可能包括同步算法、AOI、无缝地图、服务端如何运行游戏逻辑等内容。

方案2:skynet方向,用一两个章节介绍skynet的基础,再在此基础上搭建一套登陆、消息分发系统,然后开始用范例介绍逻辑实现,内容可能包括同步算法、AOI、无缝地图、服务端逻辑、热更、战场回放等内容。

方案3:Erlang方向,与方案2相似,将skynet改为erlang。

(PS:以上为调研时发出的原文)

为了做方案调研,还知乎上发了个问题《大家的游戏服务端采用什么技术方案》,得到了几十个回答,还询问诸多在不同游戏公司工作的朋友。

 链接:https://www.zhihu.com/question/357749354

最终,我选择了方案1和方案2相结合,即先用Skynet介绍服务端业务怎么写,让读者先能把游戏做出来,做到“学以致用”;有了业务基础,就容易理解底层的设计,于是进入第二部分“入木三分”,用C++仿写Skynet,在仿写的过程中去掌握网络编程、并发编程、嵌入Lua等知识,做到知其然知其所以然。如此,便有了如下所示的知识线。

《百万在线》知识线

写作:每天三小时历经九个月

手机厂商会将产品分为旗舰机型、性价比机型,写一本书大概也可以分为这两种,要不就不计成本写一本“代表作”,要不就快准狠写些热点事件。

对我而言,此前已出过几本技术书,数量上多写一两本对我意义不大,众所周知写书的经济收益可以忽略不计,所以质的突破才有意义。

有次我到游戏公司参观,发现工位上摆着不少技术书,好些作者还是我认识的。于是我找呀找呀,希望找到自己的书,给对方一个惊喜。然而……并没有找到。如果未来到任何一家游戏公司参观,随便一瞥就能看到自己写的书籍,那是一件很令人兴奋的事。

在签订出版合同的时候,预留了很充裕时间,大概,比实际交稿时间多了一年,这样就能够不背负太多进度压力安心写作。实际上,每天抽出3小时,历经9个月完成书稿。整体过程大概是:

  • 2017.10-2019.9:意愿阶段,有写作的打算,做出初步的规划,试写一些章节

  • 2019.8-2019.11:规划阶段,做调研,做出最终的目录规划

  • 2019.11-2020.3:试写阶段,编写了第一和第三章,大概以两个月一章的速度编写,过程中逐步总结写作技巧。

  • 2020.3-2020.8:坚攻阶段,大概每个月一章的节奏进行。


而后又多次校对、修改,在2021.8终于出版。

在互联网行业,写作的最大成本,在于很难维持每天几个小时的空闲。这不仅仅是自身勤奋与否的问题,更多是大环境的限制。要排解无节制占用时间的威胁,意味着要放弃一些机会。这些机会的经济效益远远超过书籍版税,但我仍相信写作是值得的。就算最终一无所获,至少也能沉淀自己的经验,也算有一点点社会价值。

书籍编写期间,一些同事帮我做了宣传,谢谢他们。

PS:以下是一些实拍,宣传期间采用名字《百万在线:游戏服务端开发实战》

点击以上链接了解详情并购买



扫码关注【华章计算机】视频号

每天来听华章哥讲书

更多精彩回顾

书讯 | 9月书讯 | 秋天的第一本书,来了

资讯 | 2021年ClickHouse最王炸功能来袭,性能轻松提升40倍

书单 | 送你一份入门前端学习路线图

干货 | 大数据的架构设计与未来

收藏 | 成为明星程序员的独特秘密

上新 | 【新书速递】UEFI开发探索

赠书 | 【第72期】什么是数据产品经理?需要什么能力?有哪些相关书籍可以读?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值