站务联系

游戏服务器和Web服务器的区别

发布时间:2021-03-16   来源:网络整理    
字号:

用Go语言写游戏服务器还有一个多月了,也才能显著的感受到二者的差别。这篇文章就是想详细的说说其中的差别。当然,在了解差别之间,我们先简略的了解一下Go语言本来。

PS:这里仅拿SLG手游举例子

1. Go语言的特征

Go语言和其他的语言比如Java比上去,算得上一门太年青的语言。Go语言是由Robert Griesemer、Rob Pike跟Ken Thompson于2007年在Google开发。并于2009年即将公布。

Go语言的设计观念紧扣着简约这两个字,认为少即是多。如果你熟悉Java,用Java那一套句型命名和Go做对比,可以很明显的感受至这些觉得。

Go的特性可以简略的概括成以下几个点。

1.1 静态类别跟编译型

首先Go是静态类别,静态类别就是编译时就晓得每一个变量的类别,得益于此,在编译的阶段能够够发觉这些问题。而如若是动态语言,例如JavaScript游戏服务器,有些问题直至运行时才会发觉。

Go是编译型语言,看到编译型你们头脑里可能会想起另外一个词解释型。两者的差别从字面上来理解似乎早已可以看下来,我用一个简略的实例来类比一下。

1.2 跨平台

顾名思义,你写的Go源码在所有的系统都才能运行。

这点虽然挺好理解,例如Java的标语是"Write once, run anywhere"。我们都晓得Java是编译型的语言,但是Java在编译的时侯生成的是字节码,这个字节码与当前的操作系统无关,与CPU也无关。

这种字节码应当依赖Java虚拟机能够运行,而虚拟机会将操作系统跟CPU之间的差距与用户屏蔽。对于编程的人来说这个过程虽然无感知的。而对Java来说,语言原本的跨平台并不能代表代码可以跨平台。

Go的跨平台从某些方面来说,与Java类别,我们还要安装与当前操作系统相对应版本的Go。编译下来的可执行文件会依照操作系统的不同而有所不同。

1.3 自动垃圾回收

与JVM一样,Go在运行时的内存管理(GC)由Go语言原本来管理,不需要程序员的参与,但是我们可以干预。

1.4 原生的并发编程

何为原生?我们都晓得,在Java中假如要实现并发, 需要外部的泛型支持(Thread),而Go不需要从外部再引进任何依赖。支持使用关键字go即可。而且Java中是通过共享显存进行通讯的,熟悉Go的应当都看过一句话“不要通过共享显存来通讯,而应当通过通讯来共享显存”

1.5 完善的建构工具

从获取、编译、测试、安装、运行跟剖析等一系列步骤都有自己的外置工具。例如获取可以使用go get命令来下载更新指定的代码包,并且对他们进行编译跟安装,可以使用go build 对源码进行编译,用go run命令来运行Go的程序,用go fmt来迅速低格代码,统一代码色调。

1.6 多范式编程

目前主流的编程范式有命令式编程、函数式编程跟我们最熟悉的面向对象编程。在撰写Go的代码的时侯,我们可以选择使用面向对象的方式,也可以使用函数式编程的思想,相互结合,相辅相成。

例如,在Go上面也可以用插口来描述行为,也可以使用纯函数来防止出现副作用。因此,多范式编程就是指这个语言支持多种编程范式的。

1.7 代码色调强统一

使用Go的外置工具go fmt即可迅速的将代码低格成官方统一的标准,以此来达到代码色调统一的目的。甚至可以用golangci-lint来测试你的时态和外置的标准时态是否有冲突,完全可以将这个测试工具挂在git的钩子上,以此来达到强制的代码色调统一的目的。

1.8 活跃的社区

还有一个很重要的特征是,国内的Go的社区非常的活跃,这对于Go在国外的普及起至了巨大的作用。

2. 用Go的优势

先说一下我对Go语言的想法,我觉得Go在服务器这块是十分有优势的。以后假如有高并发的应用场景,那么大几率这个服务就是用Go写的。不知道你们有没有发觉,摩尔定理正在失效。近十年内,硬件的原始处理能力都没有很大的增强。显然,一味的提高晶体管的数目早已不是解决问题最好的办法。

图说天下

×
二维码生成