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

rpc设计的再次思考20251215(以xdb为核心构建游戏框架)

1.服务提供者注册的方式

// 表明这是一个服务提供者,ServerType 和 ServerId从application.properties中读取
// 而且只有当当前服务是Game时,才生效。 或者 条件注解???
@RpcProvider(type=ServerType.Game)  
public class GameProvider{@MsgReceiver(MsgXxx.XxxMsg.class)public login(RpcMsgParam param){// 获取对方请求的参数MsgXxx.XxxMsg msg = param.getMsg();// 主要用于返回数据给服务消费者,这样子何时返回就无所谓了Channel channel = param.getChannel();// TODO 进行业务处理,并且根据Channel进行数据返回。}

思考:

rpc的用途仅仅是用于进程间通信,如:游戏服和游戏服,Web服和游戏服,游戏服和战斗校验服。

如果是本服的,则是线程间通信,比如:逻辑线程和地图服务在一个进程内这种开发方式,则另外指定线程间通信。

同时解决了dubbo rpc的必须是同步调用的缺陷,而我们采用xdb后,其实是可能在事务内提交成功时,才进行我们的处理。

2.暴露出的3种接口

// API1: 异步调用(比如:游戏服和游戏服通信,游戏服和战斗服通信)
RpcContext.asyncCall(serverId, xxxAsk, XxxAnswer.class).whenComplete((answer, exception)->{});// API2: 同步调用(主要是: 比如: 充值web服发货通知游戏服给道具之类的)
XxxAnswer answer = RpcContext.syncCall(serverId, xxxAsk, XxxAnswer.class);// API3: 仅仅是通知,无需返回
RpcContext.send(serverId, xxxAsk);

思考:

关键之处就是:获取serverId, 想查询一个玩家信息这种,根据玩家id其实是知道serverId的。

web服 和 联盟服之类的,这种是从注册中心获取的。

3.通信协议和编解码器

使用rj那种,比较简单的处理,只需要指定包头包体长度即可。

消息id 和 class的映射,我采用英雄传说中的。

相关文章:

rpc设计的再次思考20251215(以xdb为核心构建游戏框架)

1.服务提供者注册的方式 // 表明这是一个服务提供者,ServerType 和 ServerId从application.properties中读取 // 而且只有当当前服务是Game时,才生效。 或者 条件注解??? RpcProvider(typeServerType.Game) public class GameProvider{MsgReceiver…...

pydub AudioSegment增加音频文件音量并保存- python 实现

DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…...

IT 新突破!远程控制电脑技术造就工作与学习新方向!

远程控制电脑技术的历史可追溯到计算机网络的早期时代。最初,通过电话线和调制解调器的组合,实现了远程访问,这是远程控制电脑技术的雏形。随着互联网技术的飞速发展,远程控制电脑技术也日趋完善,并在多个领域得到了广…...

LabVIEW起落架震台检测

在现代飞机制造与维护过程中,起落架的性能测试是保障飞机安全的重要环节。通过LabVIEW开发的起落架小落震台检测系统,通过模拟飞机着陆过程,准确捕捉起落架在着陆时承受的各种动力学特性和应力响应,有效提升起落架设计的精度与可靠…...

Day24 C++ 接口(抽象类)

C 接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现。 C 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明…...

UE5 关于画质、机能与开发成本的思考

1、并不省时间 UE5等工具优点是可以通过一些工具与资源快速获得较好的画面,节约一些时间, 但缺点也很多, 一个是各种精度的素材之间的协调问题,参差不齐,统一升级到高精度会产生较大的成本, 一个是资源…...

IOS学习路线图

‌iOS是由苹果公司开发的移动操作系统。 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为…...

HICE-day6

二层交换 交换基础 所谓的二层交换机指的是针对数据的二层头部(以太网帧头)中的MAC地址进行寻址并转发数据的交换设备。二层交换机不具备路由功能,它工作在OSI七层模型的第二层,因此被称为二层交换机。 上图中,PC1、…...

第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型

基于Python 3.9版本演示 一、写在前面 上一节,我们学了经验模态分解(Empirical Mode Decomposition,EMD)。 如同结尾所说,“那么,做这些分解有什么作用呢?有大佬基于这些分解出来的序列分别作…...

(C语言)双向链表

目录 链表的分类 双向链表的实现 1)定义链表 2)初始化双向链表 3)申请节点 4)尾插 5)头插 6)打印链表 7)尾删 8)头插 9)查找 10)指定位置删除 11…...

青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求

青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求 课题摘要:一、构建WEB服务器1. 安装Go语言2. 创建项目结构3. 编写代码4. 运行WEB服务器5. 访问WEB服务器 二、接收请求1. 定义处理函数(Handler)2. 将处理函数与路由关联3. 启动服务器4. …...

Unity全局光照详解

之前就学过但是太久没用又忘了,因此用最简洁易懂的语言做个记录。 全局光照分为两个系统,分别是实时光照和混合光照。(点击window/Rendering/Lighing打开此面板) 其中全局光照对于我来说都是新技术了,上一次学…...

计算机网络知识点全梳理(三.TCP知识点总结)

目录 TCP基本概念 为什么需要TCP 什么是TCP 什么是TCP链接 如何唯一确定一个 TCP 连接 TCP三次握手 握手流程 为什么是三次握手,而不是两次、四次 为什么客户端和服务端的初始序列号 ISN 不同 既然 IP 层会分片,为什么 TCP 层还需要 MSS TCP四…...

ELK Stack 安装、配置以及集成到 Java 微服务中的使用

ELK Stack 是由 Elasticsearch、Logstash 和 Kibana 组成的日志管理解决方案。以下是详细的安装、配置步骤以及如何将其集成到 Java 微服务中。 1. 安装 ELK Stack 1.1 安装 Elasticsearch 在 Ubuntu 上安装 Elasticsearch: bash wget -qO - https://artifacts…...

list_

1.对象创建 // // Created by 徐昌真 on 2024/12/12. // #include <iostream> #include <list>using namespace std;void Print(list<int> &my_list) {for ( list<int>::iterator iter my_list.begin(); iter ! my_list.end(); iter ){cout <…...

电机驱动,为什么不需要变速器?

在现代汽车和工业应用中&#xff0c;电机驱动的技术愈发成熟&#xff0c;其核心优势之一是能够省去传统机械变速器的需求。 一、电机驱动的基本原理 电机驱动又被称为电动机驱动&#xff0c;其基本原理是将电能转化为机械能。通过控制电机的输入电压和电流&#xff0c;电机能…...

how to write 述职pptx as a tech manager

As a technical manager, crafting an effective 述职 (performance review) PPT requires you to highlight your leadership, team accomplishments, technical contributions, challenges faced, and future plans. Heres a structured approach to design your PPT: 1. Cov…...

关于QMessageBox的一些使用总结和避坑指南

参考学习 Qt中QMessageBox的用法—看这一篇就够了 Qt&#xff1a;使用QMessageBox弹出标准对话框 QMessageBox模态与非模态及QT中的exec() 如何调整QMessageBox的大小 QSS 自定义QMessageBox python QMessageBox设置标签和按钮居中、中文按钮 使用建议 经过查看多方的资料&…...

C语言预处理详解

1.预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&#…...

大语言模型画图(流程图、框架图)

第一步&#xff1a;向随意大语言模型&#xff0c;描述内容&#xff0c;推荐豆包 豆包 加上下面Prompt 通过Mermaid语法&#xff0c;描述上面流程图 第二步&#xff1a;将生成Mermaid输入流程图生成网站 中文Mermaid - 流程图、关系图在线画图、生成和编辑器...

手把手教你用STM32的编码器模式,精准读取JGB37-520电机转速(附TB6612驱动配置)

基于STM32编码器模式实现JGB37-520电机闭环控制实战指南 在智能硬件开发领域&#xff0c;精确控制电机转速和位置是实现高质量运动控制的基础。JGB37-520作为一款带有霍尔编码器的减速电机&#xff0c;配合TB6612驱动模块&#xff0c;可以构建完整的闭环控制系统。本文将深入解…...

Augmentoolkit事实数据生成管道:打造精准问答AI的终极方法

Augmentoolkit事实数据生成管道&#xff1a;打造精准问答AI的终极方法 【免费下载链接】augmentoolkit Create Custom LLMs 项目地址: https://gitcode.com/gh_mirrors/au/augmentoolkit 想要创建专属的领域专家AI吗&#xff1f;Augmentoolkit事实数据生成管道为您提供了…...

基于RK3568的智能家居控制器:硬件选型、架构设计与软件实现全解析

1. 项目概述&#xff1a;为什么选择RK3568作为智能家居控制器的“大脑”&#xff1f;在智能家居这个赛道里摸爬滚打了十来年&#xff0c;我经手过不少方案&#xff0c;从早期的单片机到后来的ARM Cortex-A系列&#xff0c;再到如今百花齐放的各类SoC。每次做产品选型&#xff0…...

告别拓展坞!实测Spacedesk无线投屏:Win10/Win11到iPad的延迟、画质与触控体验全解析

Spacedesk无线投屏实战评测&#xff1a;Win11与iPad Pro的协作新范式 当iPad Pro的Liquid视网膜显示屏遇上Windows系统的生产力工具&#xff0c;能否摆脱线材束缚实现无缝协作&#xff1f;Spacedesk这款免费无线投屏软件正在重新定义多屏工作场景。作为深度体验过各类投屏方案的…...

别再傻等!EPLAN部件库导入太慢?试试这个解压导入法,效率翻倍

EPLAN部件库高效导入实战&#xff1a;解压法与便携式部署全解析 电气工程师们对EPLAN的部件库导入速度缓慢一定深有体会——当你拿到一个几百兆的EDZ文件&#xff0c;点击导入后泡杯咖啡回来可能进度条才走了一半。这种等待不仅浪费时间&#xff0c;更会打断工作节奏。本文将彻…...

从零封装一个MCP4728的C语言驱动库:支持STM32/HAL库,含EEPROM读写状态处理

构建高可靠MCP4728驱动库&#xff1a;STM32 HAL库实战与EEPROM状态管理 在嵌入式开发中&#xff0c;DAC&#xff08;数模转换器&#xff09;是连接数字世界与模拟世界的关键桥梁。MCP4728作为Microchip公司推出的4通道12位I2C接口DAC芯片&#xff0c;凭借其内置EEPROM存储和灵活…...

UMI 采集技术落地应用 核数聚助力人形机器人快速迭代

在具身智能从实验室走向产业落地的关键期&#xff0c;数据饥渴已成为行业公认的核心瓶颈。传统真机遥操作采集成本高、效率低、泛化性差&#xff0c;仿真数据又存在物理真实性不足的问题。此时&#xff0c;UMI&#xff08;Universal Manipulation Interface&#xff0c;通用操作…...

UVM寄存器模型简化实践:提升芯片验证效率的封装与自动化方案

1. 项目概述&#xff1a;为什么我们需要简化UVM寄存器模型&#xff1f;如果你在芯片验证领域摸爬滚打过几年&#xff0c;尤其是深度参与过SoC或复杂IP的验证&#xff0c;那么对UVM寄存器模型&#xff08;UVM Register Model&#xff09;一定是又爱又恨。爱的是&#xff0c;它提…...

APM32F407移植uC/OS-III实战:从源码到多任务运行全解析

1. 项目概述与核心价值最近在捣鼓一块APM32F407的开发板&#xff0c;想给它跑个实时操作系统&#xff0c;选来选去&#xff0c;最终决定上手uC/OS-III。对于很多从单片机裸机编程转向RTOS的工程师来说&#xff0c;这个选择很典型&#xff1a;uC/OS-III源码开放、结构清晰、文档…...

告别TensorFlow!用Zylo117的PyTorch版EfficientDet-D0,手把手教你训练自己的Logo检测模型

从TensorFlow到PyTorch&#xff1a;用EfficientDet-D0打造高精度Logo检测器实战指南 在计算机视觉领域&#xff0c;目标检测一直是热门研究方向。EfficientDet作为谷歌大脑团队提出的高效检测架构&#xff0c;凭借其创新的BiFPN和复合缩放策略&#xff0c;在精度和效率之间取得…...