前言
CS和我的大学生活密不可分,本篇不讲游戏,主要描述我通过CS学习到的技术与开发的产品,以及这些如何影响了我的职业选择。
结果
我在一个30人的社群维护了4年+ CS的游戏服务器,开发了相关的网站,用户可以浏览比赛数据、下载游戏录像。 每局比赛后会发送数据总结和录像的下载地址
使用的服务
类型 | 名称 |
---|---|
计算 | 阿里云轻量应用服务器、Vercel、腾讯云函数 |
存储 | 腾讯云MySQL、腾讯云对象存储(COS) |
软件 | rclone、servercat |
技术架构
此处应有个架构图,暂时用文字描述
- 游戏服务器运行在阿里云的学生机中,用户可在游戏中通过IP链接
- 服务器插件记录实时事件,数据存储在Mysql中
- 比赛完成后,通过手机软件servercat运行服务器的bash命令,利用rclone工具将游戏录像上传至腾讯云对象存储(COS)
- 腾讯云COS触发器调用云函数,解析录像并将数据存储在MySQL中,同时将概览信息和录像下载链接发送到通知群
- Next.JS站点查询MySQL数据&steam 接口信息渲染页面
心路历程
从服务器开始
2019年10月28日我通过阿里云买到了人生的第一台服务器。学生机、9.5元/月、1核2G。借助网上的教程,我搭建了许多云服务,包括CS:GO的游戏服务器。
大学时总能聚起十个人,以至于都记住了它的IP地址:47.94.194.104
社区和服务部署
服务器可以装各种插件如自定义皮肤。我不满足于网上转载的二手消息,开始逛一些英文社区如AlliedModders和Github。
详细的readme文档使我更了解每一个插件的能力,因此发现安装的rank插件还提供了配套的网站,只需要将默认的Sqlite数据库修改为MySQL,就可以部署如下的网站展示服务器内信息。
因此我在服务器又部署了MySQL和PHP的开源站点。
游戏demo下载(对象存储&脚本自动化)
完成一局比赛后,服务器会保存一个.dem格式的文件,可以用游戏打开观看回放,伙伴们经常找我要录像剪辑视频。
我需要使用winscp或cyberduck这样的软件将文件下载到本地,再通过微信将文件发送到聊天群中。
每天都有这样的需要还必须使用电脑,我便自动化了这件事情。通过手机调用服务器运行脚本,比赛完成后将录像上传至云端并提供下载链接。
前后端开发(Nextjs)
到这里我仍然不满足,想到数据就存在MySQL中,我决定自己实现一个网站。 我常使用now.sh(后更名Vercel)的服务,其正在推行Next.JS全栈框架,便使用它完成了网站的前后端开发。
录像解析
对战平台如完美、5E结束后会显示比赛的详细数据,在Github我找到了Node.JS下的录像解析工具demoFile, 决定实现相同的功能。
demoFile可以订阅游戏中的事件如击杀、回合结束等,可以计算出各种衍生数据如ADR、总道具伤害、是否赢得残局等。
然而在服务器对录像处理时占用内存过高,影响当前玩家的体验,因此考虑如何将计算移出服务器。
云函数(serverless)正合适这种场景,借助腾讯云的COS触发器,录像上传时调用云函数处理,不占用服务器资源,同时免费。处理后的数据存储在MySQL中并发送到通知群。
总结
几年中围绕CS我学习实践了各种技术,功能多次迭代至此。为避免过于流水账,本文仅描述最终的技术实现。
收获
和游戏紧密相关的需求、真实身边的用户促进了我学习技术的热情,借此熟悉了全链路的软件开发、部署、维护,也坚定了从事软件开发行业的信念。