c# 实现RPC框架的思路
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); } }
结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2017-12-19 动态替换animator的研究
2017-12-19 unity规范
2017-12-19 游戏源码--Unity开源Moba游戏-服务器-客户端完整V1.0