如何与Unity3D交互

网络层

定时器、事件投递

多任务系统

数据持久化方案

配置文件及热配置

引擎与应用逻辑框架

服务发现机制

服务器架构实现

帐号与角色

登录流程(包括登出、重登陆)

世界场景搭建

移动、寻路及同步

AOI算法实现

辅助功能:

  • 自动构建

  • 单元测试

  • 部署及监视

  • 调试演示

自动构建

单元测试

部署及监视

调试演示

加粗的条目都有“大体相同、又有细微差异”的功能,因此在使用Go语言开发时,需要合理的使用 Go接口机制 + 反射机制,实现能按默认逻辑,又可制定某些差异的方式运行。

下面将依次考察这些条目。

如何与Unity3D交互

  • Unity3D项目支持protobuf与服务端通信,在业界比较流行。那么这项功能没有是什么大问题。

  • gRPC

    go 同时是支持 gRPC 的,设置官方git上的网址:

    gRPC默认网络协议是protobuf。目前不清楚unity3d是否支持gRPC。如果打算使用gRPC的话,Unity3D 可能需要实现 gRPC 相关规范,来达成与服务端的正常通信。

    1. https://github.com/grpc/grpc-go.git

  • protobuf

    这里是golang官方Git上提供的go protobuf项目地址:

    复制代码

    1. https://github.com/golang/protobuf.git

Unity3D项目支持protobuf与服务端通信,在业界比较流行。那么这项功能没有是什么大问题。

gRPC

go 同时是支持 gRPC 的,设置官方git上的网址:

gRPC默认网络协议是protobuf。目前不清楚unity3d是否支持gRPC。如果打算使用gRPC的话,Unity3D 可能需要实现 gRPC 相关规范,来达成与服务端的正常通信。

https://github.com/grpc/grpc-go.git

protobuf

这里是golang官方Git上提供的go protobuf项目地址:

复制代码

https://github.com/golang/protobuf.git

  • 基于 protobuf 或者 gRPC 的 远程对象同步

    这里的对象同步概念 来至于 KBEngine实体中的部分功能。

    protobuf、gRPC 通过提供工具来生成2端代码文件的方式隐藏解析网络数据流的细节。

    同理 我们可以通过制作工具,生存2端代码文件。提供给用户的是结构体、接口。而隐藏下面的RPC通信、服务端数据变化消息推送。

    这如同 c 与 c++ 的区别,protobuf、gRPC并没有提供 将 某些相关连的数据流 联系到一起的机制。而 远程对象同步,则给用户的是面向对象的编程思维。

    在熟练玩转Go语言后,是可以考虑实现该功能的。同时,这部分功能也需要Unity3D的人员配合。因为需要的是生成2端的代码文件。

基于 protobuf 或者 gRPC 的 远程对象同步

这里的对象同步概念 来至于 KBEngine实体中的部分功能。

protobuf、gRPC 通过提供工具来生成2端代码文件的方式隐藏解析网络数据流的细节。

同理 我们可以通过制作工具,生存2端代码文件。提供给用户的是结构体、接口。而隐藏下面的RPC通信、服务端数据变化消息推送。

这如同 c 与 c++ 的区别,protobuf、gRPC并没有提供 将 某些相关连的数据流 联系到一起的机制。而 远程对象同步,则给用户的是面向对象的编程思维。

在熟练玩转Go语言后,是可以考虑实现该功能的。同时,这部分功能也需要Unity3D的人员配合。因为需要的是生成2端的代码文件。

网络层

  • Go语言select关键字 + Go语言go关键字 + Go的net包

    看过Go入门教材的同学,应该能马上想的这样方式来实现。

    这种方式比较考验个人能力。好坏参差不齐。

  • 参考 github 开源库

    粗略搜索了几个star数比较多的github项目可以参考:

    1. https://github.com/davyxu/cellnet.git

    2. https://github.com/funny/link.git

  • 因此,最差的情况,直接使用star数比较多的开源库

  • 参考成熟项目中的网络模块

    这是比较保险的方式,对于有一定项目积累的公司,这是最好的方式。

  • 网络模块与应用逻辑框架的整合

    游戏服务端一般会采用 串行的逻辑层 + 并发的IO层 的方式。这部分与 应用逻辑框架搭建 相关。这里不在深入

    定时器、事件投递多任务系统

    • 使用Redis做内存数据库

      官方推荐的redisgithub地址:

      复制代码

    • 使用MySQL做数据持久化

      官方推荐的mysqlgithub地址:

      https://github.com/go-sql-driver/mysql.git

      这里有问题需要做进一步的考察:如何方便的让mysql支持海量数据存取

      如 redis 能做成集群来进行横向扩展。那么mysql是否也可以。否则只能放弃使用mysql。如让redis全全负责对数据做持久化处理。

    • redis 、mysql 与应用逻辑框架的整合

    • redis 、mysql ORM工具

      这里的对象同步概念 来至于 KBEngine实体中的部分功能。

      使用面向对象的方式操作数据。而不是redis命令、sql语句。同时可以隐藏背后的保存数据的策略。

      在熟练玩转Go语言后,是可以考虑实现该功能的。

      配置文件及热配置

    • cvs

      go 自带包encoding/csv,支持

    • json

      go 自带包encoding/json,支持

    • xml

      go 自带包encoding/xml,支持

    • 配置文件改变重加载

    • 并发操作必须是引擎可控的

      提供并发操作的统一接口

    • Actor模式

      并发系统,以Actor模式独占鳌头。搜索了下github,使用该库应该足以应对:

      复制代码

    • protoactor-go开源项目是需要重点调查下,因为看了官方用例,它提供了网络数据收发功能。因此很有可能该库可以派上用场,且可以解决很多问题。

    • 多任务系统与应用逻辑框架的整合

      数据持久化方案

    • go time包

      go语言自带了该功能。应该没有问题。

    • 定时器与应用逻辑框架的整合

    • 事件投递,基于多任务系统,即可实现事件投递

    1. https://github.com/go-redis/redis.git

    1. https://github.com/AsynkronIT/protoactor-go.git

Go语言select关键字 + Go语言go关键字 + Go的net包

看过Go入门教材的同学,应该能马上想的这样方式来实现。

这种方式比较考验个人能力。好坏参差不齐。

参考 github 开源库

粗略搜索了几个star数比较多的github项目可以参考:

https://github.com/davyxu/cellnet.git

https://github.com/funny/link.git

因此,最差的情况,直接使用star数比较多的开源库

参考成熟项目中的网络模块

这是比较保险的方式,对于有一定项目积累的公司,这是最好的方式。

网络模块与应用逻辑框架的整合

游戏服务端一般会采用 串行的逻辑层 + 并发的IO层 的方式。这部分与 应用逻辑框架搭建 相关。这里不在深入

定时器、事件投递多任务系统

  • 使用Redis做内存数据库

    官方推荐的redisgithub地址:

    复制代码

  • 使用MySQL做数据持久化

    官方推荐的mysqlgithub地址:

    https://github.com/go-sql-driver/mysql.git

    这里有问题需要做进一步的考察:如何方便的让mysql支持海量数据存取

    如 redis 能做成集群来进行横向扩展。那么mysql是否也可以。否则只能放弃使用mysql。如让redis全全负责对数据做持久化处理。

  • redis 、mysql 与应用逻辑框架的整合

  • redis 、mysql ORM工具

    这里的对象同步概念 来至于 KBEngine实体中的部分功能。

    使用面向对象的方式操作数据。而不是redis命令、sql语句。同时可以隐藏背后的保存数据的策略。

    在熟练玩转Go语言后,是可以考虑实现该功能的。

    配置文件及热配置

  • cvs

    go 自带包encoding/csv,支持

  • json

    go 自带包encoding/json,支持

  • xml

    go 自带包encoding/xml,支持

  • 配置文件改变重加载

  • 并发操作必须是引擎可控的

    提供并发操作的统一接口

  • Actor模式

    并发系统,以Actor模式独占鳌头。搜索了下github,使用该库应该足以应对:

    复制代码

  • protoactor-go开源项目是需要重点调查下,因为看了官方用例,它提供了网络数据收发功能。因此很有可能该库可以派上用场,且可以解决很多问题。

  • 多任务系统与应用逻辑框架的整合

    数据持久化方案

  • go time包

    go语言自带了该功能。应该没有问题。

  • 定时器与应用逻辑框架的整合

  • 事件投递,基于多任务系统,即可实现事件投递

使用Redis做内存数据库

官方推荐的redisgithub地址:

复制代码

使用MySQL做数据持久化

官方推荐的mysqlgithub地址:

https://github.com/go-sql-driver/mysql.git

https://github.com/go-sql-driver/mysql.git

这里有问题需要做进一步的考察:如何方便的让mysql支持海量数据存取

如 redis 能做成集群来进行横向扩展。那么mysql是否也可以。否则只能放弃使用mysql。如让redis全全负责对数据做持久化处理。

redis 、mysql 与应用逻辑框架的整合

redis 、mysql ORM工具

这里的对象同步概念 来至于 KBEngine实体中的部分功能。

使用面向对象的方式操作数据。而不是redis命令、sql语句。同时可以隐藏背后的保存数据的策略。

在熟练玩转Go语言后,是可以考虑实现该功能的。

配置文件及热配置

cvs

go 自带包encoding/csv,支持

json

go 自带包encoding/json,支持

xml

go 自带包encoding/xml,支持

配置文件改变重加载

并发操作必须是引擎可控的

提供并发操作的统一接口

Actor模式

并发系统,以Actor模式独占鳌头。搜索了下github,使用该库应该足以应对:

复制代码

protoactor-go开源项目是需要重点调查下,因为看了官方用例,它提供了网络数据收发功能。因此很有可能该库可以派上用场,且可以解决很多问题。

多任务系统与应用逻辑框架的整合

数据持久化方案

go time包

go语言自带了该功能。应该没有问题。

定时器与应用逻辑框架的整合

事件投递,基于多任务系统,即可实现事件投递

https://github.com/go-redis/redis.git

https://github.com/AsynkronIT/protoactor-go.git