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

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的映射,我采用英雄传说中的。


http://www.kler.cn/a/442390.html

相关文章:

  • Agent一键安装,快速上手Zabbix监控!
  • VUE学习笔记4__安装开发者工具
  • 用css和html制作太极图
  • qml LevelAdjust详解
  • npm发布组件(vue3+webpack)
  • Django框架:python web开发
  • 如何有效的开展接口自动化测试?
  • 使用Python实现两组数据纵向排序
  • 建立在商用GPT上的简单高效单细胞表示模型
  • C# 识别二维码
  • 【TF-IDF】Hugging Face Model Recommendation System
  • 基础入门-APP应用微信小程序原生态开发H5+Vue技术WEB封装打包反编译抓包点
  • Spring整合Redis基本操作步骤
  • C# 字符串拼接的 7 种方式及性能对比
  • 爬虫抓取的数据如何有效存储和管理?
  • 【YashanDB知识库】YCP单机部署离线升级-rpc升级方式详细步骤
  • Python `str.strip()` 的高级用法详解
  • 为何VisualRules更适合技术人员使用
  • 迅为瑞芯微RK3562开发板/核心板内置独立NPU, 算力达 1TOPS,可用于轻量级人工智能应用
  • [shader]【图形渲染】【unity】【游戏开发】 Shader数学基础2-认识点和矢量
  • Linux下MySql:表的操作
  • C++ OCR证件照文字识别
  • 详解C++中“virtual”的概念及其含义
  • Leetcode-208. 实现Trie(前缀树)
  • ubuntu+ros新手笔记(四):gazebo无法加载
  • ARM32位MCU开发板调试经验总结