网站首页 > 文章中心 > 其它

用go语言写小游戏

作者:小编 更新时间:2023-10-20 19:00:25 浏览量:288人看过

Golang 游戏leaf系列(六) Go模块

在 Golang 游戏leaf系列(一) 概述与示例 (下文简称系列一)中,提到过Go模块用于创建能够被 Leaf 管理的 goroutine.Go模块是对golang中go提供一些额外功能.Go提供回调功能,LinearContext提供顺序调用功能.善用 goroutine 能够充分利用多核资源,Leaf 提供的 Go 机制解决了原生 goroutine 存在的一些问题:

我们来看一个例子(可以在 LeafServer 的模块的 OnInit 方法中测试):

这里主动调用了 d.Cb(-d.ChanCb) ,把这个回调取出来了.实际上,在skeleton.Run里会自己取这个通道

看一下源码:

New方法,会生成指定缓冲长度的ChanCb.然后调用Go方法就是先执行第一个func,然后把第二个放到Cb里.现在手动造一个例子:

用go语言写小游戏-图1

现在把time.Sleep(time.Second)的注释解开,会是啥结果呢

另外,就是close时会判断g.pendingGo

这个例子的意思很明显,NewLinearContext这种方式,即使先调用的慢了半秒,它还是会先执行完.

这里先是用了一个list,加入的时候用mutexLinearGo锁了,都加到最后.然后新开协程去处理,读的时候从最前面开始读,也要用mutexLinearGo锁.执行的时候,也要上锁mutexExecution,确保f()执行完并且写入g.ChanCb回调,这个mutexExecution锁才会解除.现在可以改造一个带回调的例子:

Flutter+golang实现的简单的你画我猜小游戏

服务器是使用golang搭建,一个很简单的WebSocket后台 地址今天这一节

使用Go 语言开发大型 MMORPG 游戏服务器怎么样

用go语言写小游戏-图2

细节看来, 有如下的几个点:

语言, 库

用Golang就忘记继承那套东西, 用组合+接口

用Golang服务器如何保证解决游戏服务器存盘一致性问题? stop the world是肯定的, 但是Golang可以从语言层并发序列化粉丝数据, 再通过后台存盘

channel是goroutine虽然是Golang的语言特性. 但是在编写服务器时, 其实只有底层用的比较多.

Golang的第三方库简直多如牛毛, 好的也很多

不要说模板了, C#的也不好用, 官方在纠结也不要加, 使用中, 没模板确实有点不方便. 用interface{}/反射做泛型对于Golang这种强类型语言来说,还是有点打脸

运行期

Golang和C++比性能的话, 这是C++的优势, Golang因为没虚拟机, 只有薄薄的一层调度层. 所以呢性能是非常高的, 用一点性能牺牲换开发效率, 妥妥的

和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的服务器线上跑, 基本没碰到过崩溃情况

用go语言写小游戏-图3

热更新: 官方已经有plugin系统的提交, 跨平台的. 估计很快就可以告别手动cgo做so热更新

开发, 调试, 部署, 优化

LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高. 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的...

曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划... 好吧

Golang自带性能调优工具, 从内存, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我博客几年前的分析: 使用Golang进行性能分析(Profiling)

Golang支持交叉编译, 跨平台部署, 什么概念? linux是吧? 不问你什么版本, 直接windows上编译输出一个elf, 甩到服务器上开跑.不超过1分钟时间..

以上就是土嘎嘎小编为大家整理的用go语言写小游戏相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章