skip to content
Pure Ink

Counter Strike技术篇 - 游戏与我职业的发展

/ 6 min read

前言

CS和我的大学生活密不可分,本篇不讲游戏,主要描述我通过CS学习到的技术与开发的产品,以及这些如何影响了我的职业选择。

结果

我在一个30人的社群维护了4年+ CS的游戏服务器,开发了相关的网站,用户可以浏览比赛数据、下载游戏录像。 每局比赛后会发送数据总结和录像的下载地址

match record

使用的服务

类型名称
计算阿里云轻量应用服务器、Vercel、腾讯云函数
存储腾讯云MySQL、腾讯云对象存储(COS)
软件rcloneservercat

技术架构

此处应有个架构图,暂时用文字描述

  1. 游戏服务器运行在阿里云的学生机中,用户可在游戏中通过IP链接
  2. 服务器插件记录实时事件,数据存储在Mysql中
  3. 比赛完成后,通过手机软件servercat运行服务器的bash命令,利用rclone工具将游戏录像上传至腾讯云对象存储(COS)
  4. 腾讯云COS触发器调用云函数,解析录像并将数据存储在MySQL中,同时将概览信息和录像下载链接发送到通知群
  5. Next.JS站点查询MySQL数据&steam 接口信息渲染页面

心路历程

从服务器开始

2019年10月28日我通过阿里云买到了人生的第一台服务器。学生机、9.5元/月、1核2G。借助网上的教程,我搭建了许多云服务,包括CS:GO的游戏服务器。

大学时总能聚起十个人,以至于都记住了它的IP地址:47.94.194.104

社区和服务部署

服务器可以装各种插件如自定义皮肤。我不满足于网上转载的二手消息,开始逛一些英文社区如AlliedModdersGithub

详细的readme文档使我更了解每一个插件的能力,因此发现安装的rank插件还提供了配套的网站,只需要将默认的Sqlite数据库修改为MySQL,就可以部署如下的网站展示服务器内信息。

levels rank screenshot 因此我在服务器又部署了MySQL和PHP的开源站点。

游戏demo下载(对象存储&脚本自动化)

完成一局比赛后,服务器会保存一个.dem格式的文件,可以用游戏打开观看回放,伙伴们经常找我要录像剪辑视频。

我需要使用winscp或cyberduck这样的软件将文件下载到本地,再通过微信将文件发送到聊天群中。

每天都有这样的需要还必须使用电脑,我便自动化了这件事情。通过手机调用服务器运行脚本,比赛完成后将录像上传至云端并提供下载链接。

前后端开发(Nextjs)

到这里我仍然不满足,想到数据就存在MySQL中,我决定自己实现一个网站。 数据库截图 我常使用now.sh(后更名Vercel)的服务,其正在推行Next.JS全栈框架,便使用它完成了网站的前后端开发。

录像解析

对战平台如完美、5E结束后会显示比赛的详细数据,在Github我找到了Node.JS下的录像解析工具demoFile, 决定实现相同的功能。

demoFile可以订阅游戏中的事件如击杀、回合结束等,可以计算出各种衍生数据如ADR、总道具伤害、是否赢得残局等。

然而在服务器对录像处理时占用内存过高,影响当前玩家的体验,因此考虑如何将计算移出服务器。

云函数(serverless)正合适这种场景,借助腾讯云的COS触发器,录像上传时调用云函数处理,不占用服务器资源,同时免费。处理后的数据存储在MySQL中并发送到通知群。

录像解析

总结

几年中围绕CS我学习实践了各种技术,功能多次迭代至此。为避免过于流水账,本文仅描述最终的技术实现。

收获

和游戏紧密相关的需求、真实身边的用户促进了我学习技术的热情,借此熟悉了全链路的软件开发、部署、维护,也坚定了从事软件开发行业的信念。