职业起源 - 我维护的第一款产品

我大学只专注了两件事,一个是CS,另一个也是CS

Share

前言

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我学习实践了各种技术,功能多次迭代至此。为避免过于流水账,本文仅描述最终的技术实现。

收获

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

Read more

WASM初探

前言 最近开发上线了xhair.pro, 其核心的数据是通过爬虫下载.dem文件并使用一些开源的解析库如demoinfocs-golang,demoparser解析获取最终的数据 在本地下载解析上传可以随意配置环境,但浏览器无法直接运行Golang或Rust的代码。想要将解析的能力制作成web应用,需要使用WebAssembly技术。 WASM WebAssembly 是一种新的编码方式,可以在现代的 Web 浏览器中运行——它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如 C/C++、C# 和 Rust 等语言提供编译目标,以便它们可以在 Web 上运行。它也被设计为可以与 JavaScript 共存,允许两者一起工作。 我们可以把Rust、Go等语言编译成.wasm后缀的二进制文件,浏览器可以通过WebAssembly的API加载该模块,并调用相关能力 实践 不同编程语言需要通过不同的方式编译至wasm,我尝试了Go与Rust。 Golang实践 1. 首先需要配置Go的环境 go 安装 2. 初始化项目 mkdir w

By pureink

家用服务器公网访问方案

前言 因为ipv4地址数量受限,家庭宽带几乎都没有公网IP。在局域网内可以使用类似192.168.0.100这样的内网IP进行访问,但是想要在外访问或是提供给朋友使用是不行的。 方案一:内网穿透 可以使用具备公网IP的服务器进行中转,用户访问具备公网IP的服务器,该公网服务器再与家庭服务器通信,最终用户访问到家庭内网。 方案对比 方案 价格 优缺点 使用免费服务如ngrok、cloudflare tunnel 无 速度受限,部分功能需要收费如绑定域名 购买云服务器搭建 中 价格高,需要部署维护 购买FRP服务如sakura frp 低 有流量和带宽限制 个人建议 临时需求可以使用ngrok,例如给朋友看正在开发的网站 长期需求建议购买FRP服务,服务器安装frp软件后,可以通过网页配置隧道如下图,可以使用香港的服务器省去域名的备案,但不太适合云盘等大流量应用。 方案二:DDNS 内网穿透需要付费,并且有带宽和流量限制,额外的一个中转服务器也会影响访问速度。 好在ipv6已经逐渐普及,若服务端和客户端同时支持ipv6网络,

By pureink