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", );
} void S_SendMSG()
{
C_response();
}
}
结果
c# 实现RPC框架的思路的更多相关文章
- RPC框架设计思路
RPC是指远程过程调用 1.要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输.连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远 ...
- RPC框架实现思路浅析
第一部分,设计分析 远程调用要解决的主要问题: 1,序列化 : 如何将对象转化为二进制数据进行传输,如何将二进制数据转化对象 2,数据的传输(协议,第三方框架) 3,服务的注册/发现,单点故障,分布式 ...
- 8.如何自己设计一个类似 Dubbo 的 RPC 框架?
作者:中华石杉 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 MQ 一样的道理,就考两个: 你有没有对某个 rpc 框架 ...
- 全图文分析:如何利用Google的protobuf,来思考、设计、实现自己的RPC框架
目录 一.前言 二.RPC 基础概念 1. RPC 是什么? 2. 需要解决什么问题? 3. 有哪些开源实现? 三.protobuf 基本使用 1. 基本知识 2. 使用步骤 四.libevent 1 ...
- rpc框架之 thrift连接池实现
接前一篇rpc框架之HA/负载均衡构架设计 继续,写了一个简单的thrift 连接池: 先做点准备工作: package yjmyzz; public class ServerInfo { publi ...
- rpc框架之HA/负载均衡构架设计
thrift.avro.grpc之类的rpc框架默认都没有提供负载均衡的实现,生产环境中如果server只有一台,显然不靠谱,于是有了下面的设计,这其实是前一阵跟北京一个朋友在qq群里交流的结果,分享 ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
- .net RPC框架选型
近期开始研究分布式架构,会涉及到一个最核心的组件:RPC(Remote Procedure Call Protocol).这个东西的稳定性与性能,直接决定了分布式架构系统的好坏.RPC技术,我们的产品 ...
- .net RPC框架选型(一)
近期开始研究分布式架构,会涉及到一个最核心的组件:RPC(Remote Procedure Call Protocol).这个东西的稳定性与性能,直接决定了分布式架构系统的好坏.RPC技术,我们的产品 ...
随机推荐
- Apache Shiro 10分钟之旅!
欢迎来到Apache Shiro 10分钟之旅! 希望通过这个简单.快速的示例,可以让你对应用程序中使用Shiro有个深入的了解.嗯,10分钟你应该可以搞定它. 概述 Apache Shiro是什么? ...
- tcxgrid控件中drag a column header here to group by that column移除方法
- chrome console cheat sheet
快捷键 打开console界面快捷键:ctrl+shift+J 清空log:ctrl+L 选项 Log XMLHTTPRequests:显示ajax Preserve log upon navigat ...
- Oracle定時email通知
small_program_task 這張表的資料是待發送的email通知,再次之前已經有一個job會定時掃描固定時間內未接收到小程式回報狀態將其寫入到該表,send_flag為N,表示為寄過通知.e ...
- Spring学习(一)——环境准备
以前做的项目都是用.net开发的,以后准备迁移到java平台上,近期正好有个新项目要上马,所以调研下java相关技术.Spring作为java平台下的一个全栈框架, 其简洁优雅的设计和 ...
- Windows上编译libpng
下载libpng 1.5.10并解压到[工作目录]/png/libpng-1.5.10 用CMake选择png/libpng-1.5.10目录并Configure: CMAKE_C_FLAGS_DEB ...
- 【OCP-052】新版052最新题库及答案整理-第14题
14.Which command is used to display files that no longer conform to the backup retention policy? A) ...
- 【bzoj4888】: [Tjoi2017]异或和 BIT-乱搞
[bzoj4888]: [Tjoi2017]异或和 题目大意:给定一个序列,求这个序列所有的连续和的异或值.(n<=1e5 ai<=1e6) 想了各种奇怪的方法就是不会做啊啊啊.. Orz ...
- Postman使用手册4——API test
一.Pre Request Scripts Postman v0.10+ 版本支持pre-request scripts. prerequest script.png pre-request scri ...
- 基本bash shell命令
以下列举一些常用的bash shell命令,在使用时方便查找. 访问Linux系统上的手册:man 命令.例:man ps 手册是由分页程序来显示的,可以通过点击 空格,回车,向上和向下箭头 ...