分布式服务器房间匹配问题
之前接触的业务的玩家加入房间都是自带房间id,不走匹配这个逻辑。但是最近遇到没有房间id,需要在一段匹配时间内的匹配房间,需要实现分布式的匹配房间逻辑,故写此文章记录开发历程。 全局匹配节点 客户端加入房间请求需要携带roomid,但是没有roomid需要前往匹配节点进行匹配获取roomid。匹配节点通常与我们熟知的大厅服务器放在一起。服务端单独开个匹配房间的接口,客户端检测到玩家点击开始...
之前接触的业务的玩家加入房间都是自带房间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内的节点只能通过配置文件访问到其...
消息协议设计 服务端引擎的消息协议一律使用proto协议规范设计、全部的消息可以被划分为两种类型:系统内部消息和系统外部消息。系统内部消息就是在服务端引擎内部流通的消息,系统外部消息就是客户端向网关发送的消息,网关会转发到内部服务端引擎的某个节点。总的来说,就是消息的产生方不同,系统内部消息产生与系统内部、系统外部消息产生于系统外部。 这样区分的好处:第一个是客户端能够无感的迁移到新的服务...
go的并发理念是所有共享内存的访问修改的任务都推送到通道中串行修改,而不是使用锁去保护共享资源。这样的设计理念,使得在并发运算的过程中保证资源的无锁串行访问,提高程序效率。 但是无锁意味着不存在死锁情况吗?我以前是这么认为的,知道在最近的开发中,才遇见这样的问题。我们知道就算是chan,当其中的消息满的时候,此时再往chan中推送消息,推送消息方协程会被阻塞。 假设这样的场景:现在有多个...
思想 负载均衡的算法有很多,比如轮询、随机、时间片轮转等等。这里我想介绍一个负载均衡的思想,叫哈希一致性负载均衡。哈希一致性负载均衡的决策重点在于输入的哈希值,输入会被哈希到某个服务节点上。哈希一致性的特点是下一次相同的输入到来时,仍然会被hash到同一个服务节点上,这样的好处是对于同一个用户,始终访问一个服务,该服务上的redis缓存命中的概率大大提高。 进阶用法 为什么选用哈希一致性算...
在分布式系统中,有些模块服务需要单独暴露在外网供用户使用,但是其体量和重要性不如主要后台服务,不需要为其配置https服务,这个时候可不可以在http的基础上,设计一个简单的加密签名服务呢? 在整个业务中有三个主体:客户端C、服务端S、认证平台E(也就是后台)。 G收到C的登录请求,会向C发送一个一次性的salt。 C收到salt,使用自己的账号密码对salt进行加密并签名。加密用DE...