首页 微武游戏攻略 正文

想学golang游戏服务器框架?从这几个开源项目开始!

最近有点闲,就想着自己动手搞个游戏服务器框架玩玩。之前也没啥经验,就想着先从网上找找资料,看看有没有现成的轮子可以用。

这一搜不要紧,发现东西还真不少。有个叫 skynet 的,听说是云风大神写的,用的人挺多,是 C+Lua 的。我这回想试试 Golang,所以就先放一边。

然后又看到一个叫 nano 的,说是轻量级、高性能的 Golang 游戏服务器框架。还有一个叫 oak 的,说是纯 Go 写的游戏引擎。还有一个叫 pitaya 的,功能好像挺多,还能支持集群啥的。不过这些框架看一圈,感觉都不是我想要的,有点太复杂,或者说,跟我预想的不太一样。

我就琢磨着,要不自己从头撸一个?正好之前看到一个叫 Monibuca 的流媒体开发框架,它的设计思想挺有意思,说是借鉴 Vue 的渐进式思想,这个我喜欢!

我还发现 Gin,这个是写 Web 应用的,不是专门做游戏的,但它简单高效,我觉得可以拿来参考参考。毕竟游戏服务器也得处理网络请求嘛

开始动手

小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区

先搭个架子。我决定用 Gin 来处理 HTTP 请求,毕竟它用起来顺手。然后,我需要一个能处理 TCP 连接的东西,用来处理游戏客户端的长连接。这块我打算自己写,因为我对这块比较感兴趣,想深入解一下。

我得考虑怎么处理游戏逻辑。我是这么想的,把游戏世界分成一个个的房间,每个房间里有多个玩家。玩家的操作,比如移动、攻击,都通过消息来传递。这样,我就可以把不同的游戏逻辑拆分到不同的模块里,方便管理。

为让服务器能承受更多的玩家,我还得考虑分布式部署。这块我还没想好怎么做,可能需要用到一些分布式协调的技术,比如 etcd 或者 consul 啥的。不过这都是后话,先把单机版的跑起来再说。

遇到的坑

开发过程中肯定少不各种坑。比如,Golang 里的并发,goroutine 和 channel 用起来挺爽,但也容易出错。我得小心处理各种同步问题,避免出现数据竞争。

还有就是性能问题。游戏服务器对性能要求挺高的,我得时不时地做一些性能测试,看看有没有什么瓶颈。Golang 自带的 pprof 工具挺好用的,可以帮我找到那些耗时比较多的地方。

我还得看看 Golang 的源码,解一下 sync 包里的东西,比如 Mutex、WaitGroup 这些,都是怎么实现的。这样,我才能更好地理解 Golang 的并发机制,写出更高效的代码。

目前进展

我的框架已经初具雏形。能处理基本的客户端连接,能收发消息,能处理一些简单的游戏逻辑。离一个完整的游戏服务器框架还差得远,还有很多功能要实现,很多坑要填。

不过我觉得这个过程挺有意思的。通过自己动手,我对游戏服务器的底层原理有更深入的解。以后再遇到类似的问题,我就更有信心去解决。

等这个框架做得差不多,我打算把它开源出来,跟大家分享一下。毕竟开源社区里有那么多优秀的开源项目,我也想为社区贡献一份力量。

本文转载自互联网,如有侵权,联系删除