当前位置: 首页 > news >正文

架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间

本文首发在这里
重中之重就是想实现无锁!无锁!无锁!

源码

  • server
  • golang

预计还会实现gate_server,接受并保持websocket长连接,按需双向流到game_server进行消息转发

未来上述服务均会以容器的形式由k8s自动化部署、扩展、管理

实现简单示例:自创的骰子游戏

服务端

cd ~/go/src/github.com/panshiqu/server/game_server
go run main.go

客户端

cd ~/go/src/github.com/panshiqu/server/game_server/game/dice/client
go run main.go -u=1 -r=1 -seat=-1 -name=dice -auto=false -print=false
# 输入 shake 或 print# go run main.go -print
# 以上展示两种安全打印内存的方式

请查看主要对象的接口,若是能从命名、注释、查看引用就能很快理解的,下面大概率是不赘述的

游戏主要接口调用时机

  • Init(IRoom) error房间创建初始化时,调用失败会导致房间创建失败
  • Reconnect(IUser)连接即坐下,用户已在此房间有座
  • SitDown(IUser)连接即坐下,用户首次进入此房间
  • StandUp(IUser, int) bool断开即站起或其它譬如游戏结算后站起离线用户
  • OnDisband(int64)停服解散所有房间或其它譬如游戏结算后房间因无人而解散

框架开放的个别接口(赋予游戏的能力)

  • room.Disband()直接对房间发起解散

  • user.Disband()借用户发起解散其所在房间

  • user.Disconnect(int)主动断开客户端连接

  • user.StandUp(int)站起用户

  • user.SetData(any)为用户设置任意数据

  • room.Send[Pb]支持排除部分用户

核心设计

  • 连接即坐下,断开即站起
  • 游戏可以拒绝站起,将视为离线,框架负责识别重连
  • 全局错误码,pb.ErrorResponse即错误,返回错误即回复,开发环境错误回复填充调用路径
  • 框架为适应各类游戏仅负责必要逻辑,基本不校验游戏的调用,不集成用户准备、房间游戏状态等逻辑
  • 好用的定时器模块,支持添加重复定时、定时器支持重置、停止、获取剩余时间,并发亦可安全

简单说明

  • 指定数量config.Seat座位以外是旁观席且会自动扩容
  • 游戏在用户落座后检测到不符合准入条件可调用旁观接口(待实现)将用户移到旁观席
  • 框架因房间已满用户落座旁观席,待有座时游戏可调用换座接口(待实现)将用户移到可游戏座位
  • 用户在A房间却想进B房间,创建却无人进的B房间当前是懒解散,建议游戏实现逻辑解散不活跃的房间
  • gate_server收到game_serverpb.Cmd_Disconnect会调用stream.CloseSend来允许GracefulStop

关于匹配(待实现)

  • 当前进入游戏必须携带房间编号,未来会实现match_server微调雪花算法来生成房间编号
  • 基于规则优先返回已有的房间(金币场),实现打立出局、定局积分等赛制(比赛场)
  • 考虑扩展game_server支持未携带房间编号的单服匹配(小微游戏)
  • 敬请期待实现后再来阐述更多细节

写在最后

  • 写代码的时候,太多想写进博客,确实也有备忘,最后复看代码,还是不要啰哩啰嗦啦
  • 基于此刻源码成文,代码大概率会继续完善,也会尽量同步更新此文,但话不绝对

关于游戏不停服更新的补充:文字说明请看这里,代码修改请看这里

相关文章:

架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间

本文首发在这里 重中之重就是想实现无锁!无锁!无锁! 源码 servergolang 预计还会实现gate_server,接受并保持websocket长连接,按需双向流到game_server进行消息转发 未来上述服务均会以容器的形式由k8s自动化部署、…...

个人随想-gpt-o1大模型中推理链的一个落地实现

​首先祝大家中秋节快乐。 最近openai又推出了新的模型openai o1​还有它的mini版。官网的介绍,就是它的推理能力很强,比gpt-4o​有很大的提升。 最近也跟同行在聊这个o1,​看看落地方面有哪些可行性。在我们自己的实验上,把o1用…...

python解析ip范围,判断ip是否在ip范围内

目录 1. 背景 2. 代码使用示例 2.1 分割ip,横杠 (-) 的ip范围 2.2 判断ip在掩码(/)的范围内 2.3 判断ip在横杠(-)的范围内 2.3.1 格式:192.168.1.1-192.168.1.10 2.3.2 格式&…...

Springboot错误日志切面,找到post请求体被消费后的数据

问题记录:测试环境接口报错,日志里没有请求参数等信息,于是写了一个切面,但切面中获取不到 request的请求体,因为 post 请求体只能被消费一次,于是找解决办法 解决方法 既然 request 被消费了导致对应的请…...

【二十】【QT开发应用】listwidget右键菜单和删除item

创建项目,添加资源文件 在项目文件夹中创建resources资源文件夹。 在vs中打开qrc文件,选择添加资源文件。 选择我们resources资源文件中的所有文件作为资源文件。 最后不要忘记点击保存。 向ListWidget控件添加item 右键菜单 在.h文件中添加QMenu头…...

LabVIEW机动车动态制动性能校准系统

机动车动态制动性能测试系统通过高精度的硬件设备与LabVIEW软件的紧密配合,实现了对机动车制动性能的精确校准与评估。系统不仅提高了测试的精确性和效率,而且具备良好的用户交互界面,使得操作更加简便、直观。 项目背景 随着机动车辆数量的…...

Linux(CentOS8)服务器安装RabbitMQ

我安装了很久都没有成功, 各种问题, 每次的异常都不一样, 现将成功安装过程做个总结 安装前工作 确保已经安装了一些基础工具和组件库 下载安装包 https://www.erlang.org/patches/otp-24.3.4.5 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.15/ra…...

R语言进行无序多分类Logistic回归

在临床研究中,接触最多的是二分类数据,如淋巴癌是否转移,是否死亡,这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程,可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据&#xf…...

Maven从入门到精通(三)

一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件,包括本地仓库、远程仓库、私服、认证等信息。 全局 settings、用户 setting、pom 的区别: 全局 settings.xml 是 maven 的全局配置文件,一般位于 ${maven.home}/conf…...

Red Hat 和 Debian Linux 对比

原图的作者(https://bbs.deepin.org/post/209759) Red Hat Enterprise Linux https://www.redhat.com/ CentOS Linux https://www.centos.org/ Fedora Linux https://fedoraproject.org/ Debian https://www.debian.org/ Ubuntu https://cn.ubuntu.com/ https://ubuntu.c…...

Axure设计之全屏与退出全屏交互实现

在Axure RP中,设计全屏与退出全屏的交互功能可以极大地提升用户体验,尤其是在展示产品原型或进行演示时。本文将详细介绍如何在Axure RP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。 ​ Axure原型设计web端交互元件库:https://…...

如何测试出自己电脑的网络速度(网速)?

首先电脑上要下载一个这样的一个电脑软件:360安全卫士 1、打开软件之后,选择【网络安全】 2、选择【宽带测速器】 3、点击之后,即可开始检测当前网络速度,等待大概十几秒后会出现结果,如下: 位置①:显示…...

如何利用AI进行有效的科技产品发布

如果你们公司即将推出一款具有颠覆性的软件,你大概已经了解了科技在现代市场中的价值。 但像AI这样的技术不仅仅是有效的产品组成部分,它们还可以帮助将这些产品推向客户(或安装到他们的电脑上)。 Kuno Creative明白AI在科技营销…...

二层、三层网络基本原理

文章目录 二层网络整体拓扑相关配置配置namespace创建switch创建veth设备配置veth的IP启动veth 测试 三层网络配置vm1配置vm2配置 测试 二层网络 我们用Linux bridge模拟现实中的switch,用namespace模拟连接在交换机上的pc 整体拓扑 ------------------ ----…...

全面掌握 Jest:从零开始的测试指南(上篇)

随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节。 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式。为了校验这些算法函数的健壮性,部…...

Go 交叉编译

Mac 下编译 Linux 和 Windows 64位可执行程序 Linux: CGO_ENABLED0 GOOSlinux GOARCHamd64 go build main.go Windows: CGO_ENABLED0 GOOSwindows GOARCHamd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 Mac: CGO_ENABLED0 G…...

goctl安装失败

今天遇到一个很奇怪的问题 在阿里云的ubuntu服务器上远程安装goctl:go install github.com/zeromicro/go-zero/tools/goctllatest,后面会断开ssh连接,就再也连不上了,connecting with ssh timed out。在阿里云的workbench上连接显…...

DebateGPT:通过多智能体辩论监督微调大模型

人工智能咨询培训老师叶梓 转载标明出处 这些模型的训练通常依赖于资源密集型的人工反馈,这不仅成本高昂,而且耗时。为了解决这一问题,一篇名为《FINE-TUNING LARGE LANGUAGE MODELS WITH MULTI-AGENT DEBATE SUPERVISION》的论文提出了一种…...

【最新综述】基于深度学习的超声自动无损检测(下)

4.Levels of automation 5.Basic axioms for DL-based ultrasonic NDE 在回顾了最新技术和每个自动化级别的贡献之后,我们不难发现,目前的数字语言方法论在不同论文之间存在着很大的差异。例如,有些作者提出了同时处理不同步骤的模型[121]&…...

kali——tshark的使用

目录 前言 使用方法 tshark提取流量为文档 前言 tshark 是一个命令行的网络分析工具,它用于捕获和分析网络流量。它支持多种网络协议,包括 TCP、UDP、ICMP 等。Tshark 可以用于调试网络问题、进行安全审计、分析应用程序性能等。 在 Kali Linux 中&…...

解锁RO游戏自动化工具:从效率瓶颈到智能辅助的实践指南

解锁RO游戏自动化工具:从效率瓶颈到智能辅助的实践指南 【免费下载链接】openkore A free/open source client and automation tool for Ragnarok Online 项目地址: https://gitcode.com/gh_mirrors/op/openkore 在MMORPG游戏领域,重复刷怪、繁琐…...

为什么大厂都不用 Apache 了?Nginx 反向代理才是微服务入口

一、前言本文将带大家全面认识Nginx:它是什么、为什么能成为行业主流、核心优势有哪些、能解决哪些实际业务问题,以及和我们熟悉的Apache服务器有什么区别。二、什么是Nginx?Nginx(发音为“engine x”)是由俄罗斯程序员…...

ARM64架构下利用docker-compose实现tendis单机版高效离线部署指南

1. 为什么选择ARM64架构部署Tendis? 最近几年ARM架构处理器越来越流行,从树莓派到苹果M系列芯片,再到各种云服务器的ARM实例,性能提升明显的同时功耗还更低。我去年接手的一个项目就要求全部跑在ARM64服务器上,当时部署…...

抖音直播数据抓取实战:零基础掌握直播间弹幕分析技术

抖音直播数据抓取实战:零基础掌握直播间弹幕分析技术 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2024最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 想要获取抖音直播间的…...

嵌入式多线程与多进程技术详解

嵌入式软件编程之多线程与多进程技术解析1. 操作系统任务调度基础1.1 时间片轮转调度机制现代操作系统(如Windows、Linux)普遍采用时间片轮转的抢占式调度方式。在这种机制下:每个任务执行固定长度的时间片后被强制暂停被暂停的任务进入就绪状…...

Pixel Dream Workshop 助力前端开发:Vue.js 项目动态视觉素材生成指南

Pixel Dream Workshop 助力前端开发:Vue.js 项目动态视觉素材生成指南 1. 为什么前端开发者需要关注视觉素材生成 作为一名Vue.js开发者,你可能经常遇到这样的困扰:产品经理突然要求给新功能加个炫酷的Banner图,设计师资源紧张排…...

ROS机器人开发实战:利用tf2库高效处理四元数、欧拉角与旋转矩阵的转换

1. 为什么机器人开发需要处理多种姿态表示 在机器人开发中,我们经常需要处理各种姿态数据。无论是移动机器人的定位信息、机械臂末端执行器的位姿,还是传感器数据的融合,都离不开对物体在三维空间中位置和朝向的描述。但有趣的是,…...

春节不用愁对联:春联生成模型实战,3步生成专属春联

春节不用愁对联:春联生成模型实战,3步生成专属春联 1. 传统年味遇上AI科技 每到春节,家家户户贴春联是延续千年的传统习俗。一副好春联既要对仗工整,又要寓意吉祥,还要符合自家特色,这让不少人为之头疼。…...

深度学习环境配置太麻烦?试试这个训练环境镜像,一键部署快速上手

深度学习环境配置太麻烦?试试这个训练环境镜像,一键部署快速上手 1. 为什么选择这个训练环境镜像 深度学习项目开发的第一步就是搭建环境,这个过程往往充满挑战: 需要手动安装CUDA、cuDNN、PyTorch等框架,版本匹配问…...

Qwen3-ASR-1.7B效果实测:识别普通话、英语、方言,准确率惊人

Qwen3-ASR-1.7B效果实测:识别普通话、英语、方言,准确率惊人 1. 多语言语音识别新标杆 当我第一次听到Qwen3-ASR-1.7B能够识别30种语言和22种中文方言时,说实话我是持怀疑态度的。毕竟在语音识别领域,支持的语言越多&#xff0c…...