Go游戏服务器开发的一些思考(一):语言层面

来源:互联网 发布:怎么装潢淘宝店铺 编辑:程序博客网 时间:2024/04/29 23:02

Go是比C++更好用的高级语言

使用Go作为服务器开发的主语言前,首先需要对Go语言做下定性。在接触Go前,可能给人的印象(至少是我),Go是一门脚本语言。看了 官方文档 ,才知道Go是一门高级语言。与C++相比,它有以下优势:

  • 面向接口的编程

    没有C++复杂的面向对象语法,如类、继承、多态、虚函数等等。Go中只有结构与接口,从语言层面上,直接指导功能与功能间的解耦。直接且语法简单

  • 提供语言反射机制

    提供了弱反射机制,虽然没能像脚本语言那样可以动态创建属性、方法等。但也提供了能通过字符串来操作结构体、接口的能力

  • 编译速度很快

    虽然没有同等量级的C++、Go项目做比较。但是可以明确说 Go编译速度比C++快非常多

  • 丰富的功能包

    意味着可以用更少的代码实现相同的功能

  • 简化并发模式

    暂时没仔细研究,但在做网络模块等前,需要详细了解

因此从某种角度来说,可以得出这样的结论,Go是一个比C++跟好用的高级编程语言

那么,同为高级语言,对于C++程序出身的、有服务器开发经验的人,显然所有服务器相关的概念全部可以搬过来。并可以使用Go,以更少代码量的方式实现之

引擎模块、应用逻辑框架与具体业务代码的分割线

C++服务器框架通常会使用C++来编写引擎模块、应用逻辑框架;使用脚本语言来制作具体业务逻辑。这样的好处非常明显,不管项目如何迭代,引擎模块、应用逻辑框架始终有高级程序员来维护,从而保持了服务器框架的质量

Go也可以使用 Go + 脚本语言 的方式。github上的确有go-python、golua开源项目。考虑到Go在语法、用法上,都有意朝脚本语言上靠。因此个人认为 Go + 脚本语言 的做法有些本末倒置。

Go语言提供的接口编程,天生可以很好的解决这个问题。
首先以下方式很常见:

  • 引擎模块、应用逻辑框架 单独成包
    (Go中的包类似于C++中的库)
    业务逻辑层的程序应避免直接修改 引擎模块、应用逻辑框架。因为过手的人越多,最终会变得无法维护

  • 提供应用程序框架,并定义 启动 具体应用 的 接口
    适配器模式。实现适配接口的具体应用,就可以通过引擎框架启动运行

  • Go语言反射机制可以让引擎框架自动启动具体应用

结合以上功能点,Go服务器在架构上可以分成3部分:

1. 以包形式分发的Go服务器引擎    可以是源码包 也可以是go build后的2进制包文件2. 应用程序框架    利用反射机制加载具体应用(Go中表现为具体结构),并根据事先定义好的适配接口,启动具体应用    该框架实际上也会随 Go服务器引擎 一起分发,单独拎出来,主要在于它其桥梁作用,不可或缺,必须介绍3. 具体应用

ps. 上面的3部分还可以做下变形,变成 Go基础服务节点 + 具体应用的2进制包 的方式提供(类似 mysql服务器 加载 某存储引擎,如 MyISAM 、InnoDB)。我们不做某类型服务 云提供商,因此这种变形基本上是不会用到的

总结

本节主要从 Go语言性质 说起,介绍了一种 使用Go语言开发,并严格限定 引擎模块 和 具体应用的 界限。

接下来的文章,将思考Go游戏服务器应当具备哪些功能和开发路径等问题

阅读全文
1 0
原创粉丝点击