Leaf-Server官方教程: Leaf Go

Posted Kaitiren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leaf-Server官方教程: Leaf Go 相关的知识,希望对你有一定的参考价值。

Leaf Go

善用 goroutine 能够充分利用多核资源,Leaf 提供的 Go 机制解决了原生 goroutine 存在的一些问题:

  • 能够恢复 goroutine 运行过程中的错误
  • 游戏服务器会等待所有 goroutine 执行结束后才关闭
  • 非常方便的获取 goroutine 执行的结果数据
  • 在一些特殊场合保证 goroutine 按创建顺序执行我们来看一个例子(可以在 LeafServer 的模块的 OnInit 方法中测试):
log.Debug("1")
 
// 定义变量 res 接收结果
var res string
 
skeleton.Go(func() {
    // 这里使用 Sleep 来模拟一个很慢的操作
    time.Sleep(1 * time.Second)
 
    // 假定得到结果
    res = "3"
}, func() {
    log.Debug(res)
})
 
log.Debug("2")

上面代码执行结果如下:

2021/06/16 20:37:17 [debug  ] 1
2021/06/16 20:37:17 [debug  ] 2
2021/06/16 20:37:18 [debug  ] 3

这里的 Go 方法接收 2 个函数作为参数,第一个函数会被放置在一个新创建的 goroutine 中执行,在其执行完成之后,第二个函数会在当前 goroutine 中被执行。由此,我们可以看到变量 res 同一时刻总是只被一个 goroutine 访问,这就避免了同步机制的使用。Go 的设计使得 CPU 得到充分利用,避免操作阻塞当前 goroutine&

以上是关于Leaf-Server官方教程: Leaf Go 的主要内容,如果未能解决你的问题,请参考以下文章

Leaf-Server官方教程: Hello Leaf

Leaf-Server官方教程: Hello Leaf

Leaf-Server官方教程 && 游戏引擎源码实践

Leaf-Server官方教程 && 游戏引擎源码实践 (21年6月每周会更新RoadMap文章)

Leaf-Server官方教程: Leaf ChanRPC

Leaf-Server官方教程: Leaf ChanRPC