如何与Unity3D交互
网络层
定时器、事件投递
多任务系统
数据持久化方案
配置文件及热配置
引擎与应用逻辑框架
服务发现机制
服务器架构实现
帐号与角色
登录流程(包括登出、重登陆)
世界场景搭建
移动、寻路及同步
AOI算法实现
辅助功能:
自动构建
单元测试
部署及监视
调试演示
自动构建
单元测试
部署及监视
调试演示
加粗的条目都有“大体相同、又有细微差异”的功能,因此在使用Go语言开发时,需要合理的使用 Go接口机制 + 反射机制,实现能按默认逻辑,又可制定某些差异的方式运行。
下面将依次考察这些条目。
如何与Unity3D交互
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
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项目可以参考:
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语言自带了该功能。应该没有问题。
定时器与应用逻辑框架的整合
事件投递,基于多任务系统,即可实现事件投递
https://github.com/go-redis/redis.git
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