客户端请求+返回 服务端之间的请求和返回 实现rpc通信

背景:

1.无论什么类型的游戏,我们都会有rpc通信的需求。

2.由于客户端直连的是游戏服,如果工会,匹配之类的服务是单独的服务的话,必然要进行游戏服到业务服之间的转发,我们是否需要再转发时单独定义Req和Res就是我们考虑到的需求。

3.在vega项目中,我们选择了定义了内部协议的req和res,而不是像热江一样做了统一的封装,看起来麻烦了一点,但是实际上却是非常的清晰。

一个案例如下:

复制代码
 1.发出rpc请求
        // GuildService.java
            getRecommendList方法:

             // 向world服发送请求推荐列表(GuildBizModule.java进行RECOMMEND_LIST协议的处理)
             BinaryMsg msg = buildBinaryMsg(GuildLogicEnum.RECOMMEND_LIST, role.getRid());
             msg.writeInt(role.getLevel());

             // 思考下我们的rpc需要什么参数
             // 1.req  请求类型,这个我们希望是pb这种强类型的
             // 2.rep.class  返回的类型
             // 3.ResponseData<Boolean, Rep> 是否远端处理成功,有时候我们先本地扣东西,用于回滚
             // 4.hashId 远端在哪个线程执行  我们一般采用类似于actor模型,因此需要告知远端到底在哪个线程执行
             S2SHelper.sendMsg2WorldServer(msg, rid, BizType.GUILD,
                     Constants.BIZ_GUILD_DEFAULT_SUBKEY, new RespCacheCallback<>(role) {
                         @Override
                         public void onCallback(BinaryMsg msg) {
                             int result = msg.readInt();
                             if (result < 0) {
                                 handlerError(role, requestId, msg);
                                 return;
                             }
                             JSONObject json = msg.readObject(JSONObject.class);

                             // 这个是要返回给客户端的数据 setData是RespCacheCallback
                             setData(json);
                         }
                     });

     // 其实,我也不太需要知道当前是哪个类,通过消息号范围即可


    2.World进行业务端处理
        GuildBizModule.java
            processMsg方法:
                switch (codeEnum) {
                     case RECOMMEND_LIST:
                         WSGuildService.recommendList(replyTo, rid, msg);
                 }
相关推荐
未来之窗软件服务25 分钟前
幽冥大陆(六十八) PHP8.x SSL 文字加密—东方仙盟古法结界
网络·网络协议·ssl·仙盟创梦ide·东方仙盟·文字加密
G_H_S_3_6 小时前
【网络运维】Docker 存储:镜像层与数据卷的管理应用
linux·运维·网络·docker
还鮟9 小时前
靶机远程控制实验命令与入门实践(Linux)
linux·网络·安全
Hello.Reader10 小时前
Flink Process Table Functions(PTF)实战详解:把 SQL 变成“可编程算子”,状态、时间、定时器一把梭
网络·sql·flink
2301_7737303112 小时前
网络编程—TCP传输控制协议
服务器·网络·tcp/ip
云老大TG:@yunlaoda36012 小时前
华为云国际站代理商DAS的跨境合规适配是如何保障数据合规的?
网络·数据库·华为云
科技块儿12 小时前
【账号安全预警】如何基于IP查询进行登录异常识别、账号防盗?
网络协议·tcp/ip·安全
TG:@yunlaoda360 云老大12 小时前
华为云国际站代理商DAS的跨境合规适配在游戏出海场景中的应用
服务器·网络·游戏·华为云
没有bug.的程序员12 小时前
熔断、降级、限流:高可用架构的三道防线
java·网络·jvm·微服务·架构·熔断·服务注册
知新坊13 小时前
飞牛NAS 没有公网 IP?使用它让 NAS 访问、文件远程像在局域网
网络·网络协议·tcp/ip