小游戏重构之路

  • 记录一下重构小游戏过程中的体会。
  • 重构开发语言 Golang,额外涉及开发语言PHP,C++

前景

  • 接手小游戏重构有骰宝、大菠萝、夺宝奇兵,虽然各种原因没有上线,或上线验证后出现问题暂停上线状态。
  • 轻量支撑服务有小喇叭、大厅代理层,已上线正常使用。
  • 只是服务端部分重构。

场景

重构缘由

  • 服务老化,维护成本大。稳定的项目没人愿意去调整,大部分时间就处理搁置状态了,只是个别时候在需要加点东西的时候就麻烦来了。可能这个项目的核心用了好几年前的一个技术,如 swoole 1.8.x 版本,某些时间要解决问题只能使用绝招“重启大法”。能用可用,但难以维护这样的状态。
  • 折腾心理。某些时候需求不饱和前提下,就闲得慌蛋疼,想整点东西,而能为现有项目提供价值是更好了。
  • 学习目的。站在巨人肩膀上可望得更远,虽然攀登过程需要披荆斩棘。

开发语言

  • 做为PHP出身的程序员难免不想囚困于web领域。
  • Golang 能让我体会到开发过程中的轻松感。
  • 大部分时间都处于自撸项目,所以不需要见识千奇百怪的代码风格,毕竟项目的复杂度就是因人而生。有人的地方就有江湖!!!
  • 自知 C++ 只能读出思路的程度。

历程

因为不是从0到1,所以必须基于原有的套路上进行,毕竟纯粹的服务端重构,需要保证与客户端的数据一致性。

整个历程里面这部分是最难受的,项目一般年久失修,可能仅有原有源码。这部分也是最耗时的,虽然有的服务眼看是只有几个功能如下注、结算、发奖,但数据是不会撒谎,数据有出入那结果就异常。

最重要的是需要一颗包容的心,骂x多了难免麻木。话虽如此,意仍难平,江湖如此,身不由已!

Golang 的优势就是轻量,不用像 PHP 那样凡事先搬出个框架,不过服务写得多了也会自成框架。框架模型元素大体整理有

  • 入口,服务端、客户端等。
  • 功能模块,日志、配置、指标、DB、缓存、基于自有协议服务客户端如用户、上报等。
  • 业务逻辑,路由控制,具体实现。
  • 脚本,编译、发布等

不喜欢等所有东西都实现了才进行测试,没那耐心,一般测试难免存在遗漏,亡羊补牢即使能管用但肯定会痛苦。拆分化开发和测试,有坑早点填,也趁早安心。

此外,重构都是换语言进行,不同语言开发思路差异化还是很大的。如果进行直翻,那简直就是种了棵树苗在心口,一时间不起眼就吸引掉所有阳光,眼望它在那灿烂。

问题

语言

换语言重构最大问题就在于尽可能的使用适合的方式,Go、PHP、C++ 三个不必进行比较,道路千万条,适合了才会舒服。

Go

小游戏基本上数据都是有状态的,当 goroutine 不受约束,惊喜就会不期而至,必须心怀敬畏啊。

意义