通用背包设计范式以及背包数据持久化思路以及微服务化探索
笔者这几天在开发背包系统,调研了一些背包系统常规的设计思路,这里做下总结和思考。 分布式思路 背包系统是能够被抽象成单独的服务、为多个游戏提供服务的,因为背包系统所需要的功能对于大部分游戏来说是差不多的,无非是对道具的增删查改,过期检查,装备卸下等功能。如果能够抽象成单独的服务,对外开放接口,这样就能提高游戏系统的复用率,降低维护成本。所以后面的设计思路都将围绕这个主题进行设计展开。 通...
笔者这几天在开发背包系统,调研了一些背包系统常规的设计思路,这里做下总结和思考。 分布式思路 背包系统是能够被抽象成单独的服务、为多个游戏提供服务的,因为背包系统所需要的功能对于大部分游戏来说是差不多的,无非是对道具的增删查改,过期检查,装备卸下等功能。如果能够抽象成单独的服务,对外开放接口,这样就能提高游戏系统的复用率,降低维护成本。所以后面的设计思路都将围绕这个主题进行设计展开。 通...
为了准备即将到来的秋招,本篇文章主要讲解acm输入输出模式,这是因为秋招笔试中大部分笔试都要求我们进行acm模式的输入输出,而不是核心代码模式。 由于本人习惯使用cpp来刷题,所以本篇的acm输入输出模式的介绍也是cpp模式。 整型数组输入 示例: 3 1 2 3 int main() { int n; cin >> n; vector&...
为全局变量的获取设计Get函数,全局变量的初始化函数返回这样的Get函数。 首先是Get函数的设计 func Get[T any] func() T func (getter Get[T]) Get() T { return getter() } 假设现在有全局变量GloabalVar, 设计其初始化函数。 func InitGloabalVar(params ...any)...
需求 在分布式环境下,多台服务器后端处理用户连接,对于用户连接可能会打到不同的服务器上。在这样的条件下,如何实现用户异地登录挤号的需求呢。用户异地登录,登录请求可能会打到另外一台服务器上,分布式系统如何将旧的在另一台服务器的用户连接给断开,接受新的登录连接呢? 实现方案 redis+消息队列实现 首先我们来分析需求制定方案。不允许用户同时登录在多台服务器上,也就是登录具有唯一性。自然而然...
之前接触的业务的玩家加入房间都是自带房间id,不走匹配这个逻辑。但是最近遇到没有房间id,需要在一段匹配时间内的匹配房间,需要实现分布式的匹配房间逻辑,故写此文章记录开发历程。 全局匹配节点 客户端加入房间请求需要携带roomid,但是没有roomid需要前往匹配节点进行匹配获取roomid。匹配节点通常与我们熟知的大厅服务器放在一起。服务端单独开个匹配房间的接口,客户端检测到玩家点击开始...
前情提要:本篇为翻译,原文地址如下: The DOOM III Network Architect The DOOM III Network Architect \ DOOM3网络架构 Abstract \ 摘要 一个能提供玩家快节奏的强交互游戏环境的电脑游戏必须要提供一致的响应及时的体验。然而,在电脑游戏的运行基于网络连接的情况下,这是困难的,因为网络环境充斥着强制因素,比如带宽,信...
引发这个问题的思考是来自开发中的一个问题。场景是这样的,中台向游戏服务端发放用户的道具,服务端收到发放用户道具请求时,需要解决下面几个问题: 用户在线和不在线的处理区别 用户在线时收到道具的客户端通知和状态同步 用户在线和不在线的处理区别 用户的状态数据在内存中有一份、在硬盘中有一份。客户端的状态通常依赖于内存中的用户信息,也就是内存数据和硬盘数据的更新存在延迟性。为了提高...
什么是Software 质量模型六个属性 Functionality Reliability Usability Efficiency Maintainability Portability 三种软件错误 software fault:软件静态缺陷 software failure:与软件需求或预期描述不符合的外部错误行为 software er...
笔者在开发中遇到许多监控进程退出的需求,现尝试将这部分需求通用化,用于服务程序监听退出信号,进行优雅的退出,在退出时进行退出处理。下面是笔者尝试编写的代码,仅供参考。 func WaitClose(handler func()) { defer handler() c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGHUP...
Actor Name 地狱 为什么会有ActorName地狱呢,因为在Actor System中,万物皆为Actor,都有自己的Name。这样导致Actor Ref的发现变得非常困难。加上Actor灵活的生成销毁,Actor Name集合是不断处于变化的状态的。 一个简单粗暴的解决方案,就是把主要节点的Name写死在配置文件中。不同的ActorSystem内的节点只能通过配置文件访问到其...