• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c#实现RPC框架的思路

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

RPC框架,就是远程调用一个方法就像是本地调用一样。

用于网络消息的话,那么你的收发消息通过异步方法可以写在一起,很方便

核心代码

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using DragonBones;
using UnityEngine;

/// <summary>
/// Test实现RPC框架
/// </summary>
public class TestTask : MonoBehaviour
{
    private readonly Dictionary<string, Action<object>> requestCallback = new Dictionary<string, Action<object>>();
    
    // Start is called before the first frame update
    void Start()
    {
        TestAsync();
    }

    //异步方法
    async void TestAsync()
    {
        object data = await MyTestTask();//await回调返回的方法
        Debug.Log("执行完毕,收到的数据为" + data);
    }

    //这个地方我用了object,会有装箱操作,当然ET填的的是一个接口interface,你也可以选择填一个接口
    //返回的数据包必须是一个类结构,继承这个接口,然后在里面进行一次隐式转换,就能拿到原有类的对象了
    //如果传回来的类不是个接口,比如字典嵌套类(当然很少有人这样做),需要针对字典,List这种 做个优化也是可以
    //object虽然万能,但是有个装箱操作,或者用其他方法优化他
    //以前写的一个优化object的方法:https://www.cnblogs.com/sanyejun/p/9564320.html
    Task<object> MyTestTask()
    {
        C_SendMsg();//发送方法
        TaskCompletionSource<object> tcs;
        tcs = new TaskCompletionSource<object>();
        Debug.Log("消息发送完毕");
        //给对应的加入回调
        requestCallback["C_response"] = (data) =>
        {
            print("异步结束");
            tcs.SetResult(data);//给返回值赋值,这里面的data类型取决于前面 Task<类型>
        };

        return tcs.Task;
    }


    /*******************模拟客户端******************/
    void C_SendMsg()
    {
        print("客户端发送消息");
        S_ServerMethod();
    }

    //RPC
    void C_response(object data)
    {
        Debug.Log("收到了来自服务器的消息");
        requestCallback["C_response"](data);
    }
    
    /****************模拟服务器***************/
    void S_ServerMethod()
    {
        print("服务端接收到了消息");
        //模拟网络发送慢的等待时间3秒
        Invoke("S_SendMSG", 3);
    }

    void S_SendMSG()
    {
        C_response(998);
    }
}

结果

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
常见的排序算法C#版发布时间:2022-07-10
下一篇:
C#高级编程----反射的小结发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap