91. 2023-12-17周总结

  1. 总结的好处
  2. 增加游戏组Id
  3. 游戏管理统一后台
  4. 游戏服务器支持Http

1. 总结的好处

不止一次体会到总结的好处了,加强了自己解决的问题的印象,同时记录解决方案方便二次查找该类问题的解决方案。

这周遇到的问题就是新项目手机上烘培效果不对,之前有记录相关解决方案,照着做了一遍问题解决了。

2. 增加游戏组Id

上周说到在做服务器列表的时候使用了ServerGroupId概念,这周在构思其他的时候发现这个在Server上分组的概念有点局限性,应该在GameId维度上面抽象出来一个GameGroupId概念,这个会更好匹配我们现在的四层概念(产品、发行商、平台、渠道来确定一个GameId),同时后台权限也划到这一层,方便管理。

3. 游戏管理统一后台

一直想做一个统一后台,方便管理GameId和上面提到的GameGroupId,以及GameGroupId层下的一些功能,比如服务器列表,配置、公告等等。

目前后台做了一版初版,能简单配置GameId、GameGorupId、服务器列表,后续继续加入客户端服务端配置,邮件,停服等功能


4. 游戏服务器支持Http

为了支持后台,游戏服务器需要对后台开发一个Http端口,方便后台发送http请求过来进行一系列操作,比如拉取玩家信息,发送邮件,停服等操作

可能是因为.net有asp.net的存在,所以纯.net的http server比较少,试用了一些之后,最终选择了HttpServerLite这个库来作为我们的http server。

httpserver不需要每个游戏服务器都提供,整个游戏服务器组里面有一个(我叫做Center服务器)来提供即可,所有服务器通过tcp直连这台服务器,通过监听收到的HttpCommand命令来响应相应的请求被给出结果。

服务器内部的通信不太想用ProtoBuff,主要是使用起来比较麻烦,需要定义.proto文件,然后输出C#,这种方式比较适合前后端不同人或者不同语言开发的情况。而服务器内部通信(同一种语言,大概率同一个人开发)的情况下就显得比较繁琐。目前比较好的选择是MsgPack或者新出的MemoryPack,看了MemoryPack文档说性能会更好,于是就选了他,使用起来跟MsgPack一样方便。

在用MemoryPack的时候遇到个问题,本地跑没啥问题,但是用jenkins打包服务器并在测试服启动的时候就会遇到Provider找不到问题,仔细翻看jenkins打包日志发现有这么一行
CSC : warning CS8032: An instance of analyzer MemoryPack.Generator.MemoryPackGenerator cannot be created from /home/ab/.nuget/packages/memorypack.generator/1.10.0/analyzers/dotnet/cs/MemoryPack.Generator.dll : Could not load file or assembly 'Microsoft.CodeAnalysis, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. The system cannot find the file specified.. [/home/ab/jenkins/workspace/FootballBox/Develop/BuildServer/Game.Server/Game.Server/Game.Server.csproj]

有个MemoryPack.Generator.dll加载失败了,这个dll是用来自动生成Provider代码的,所以运行时候报Provider找不到了。

搜了相关资料,报这个问题是因为sdk和runtime版本装的不对,打包机上的.net 6 sdk和runtime还是rc版本,把sdk和runtime升级到最新的6.0.25版本后问题解决。