运行环境,客户端一般编译为.Net 3.5 Unity兼容,
服务端因为用了一些库,所以一般为4.0 或往上。
同一份代码,建立拥有2个项目。
客户端引用: WindNet.Client
服务端引用: OpLog.Core WindNet.Web

然后服务端添加编译标记为SV

看代码:

    //PostSharp AOP标记 拥有此标记的方法将可以远程调用
[TypeProxy]
public class LocalTest
{ //callback为必须,如果没有此方法,则不可进行远程调用
//远程调用模式中
// var xx = LocalTest.StaticCallTest 这种调用方式是错误的。
// var xx = LocalTest.StaticCallTest 这种调用方式是错误的。
// var xx = LocalTest.StaticCallTest 这种调用方式是错误的。
public static string StaticCallTest(string arg1, Action<string> callback = null)
{
return arg1 + "callback";
}
}

  

一个静态的类,并且有个方法,我们要做的就是,让这个StaticCallTest在远程返回然后在本地执行callback

        static void Main(string[] args)
{
#if SV //SV标记为服务端代码,客户端不执行
WebHost.Start();
Console.ReadLine(); #else //客户端代码,服务端并不执行
//默认输出到控制台
DebugHelper.ConsoleOut = true;
//注册入口类型以及对应的程序集,防止找不到对应的类 只需要启动时注册一次
WindNet.RemoteCall.Instance.RegTypes(typeof(Program)); //关闭标记,默认为远程RPC请求
WindNet.RemoteCall.Instance.IsLocal = false; //执行一个方法
//本地方法会立刻返回
//远程执行 因为直接返回 所以结果是错误的,返回值不可用
// var xx = LocalTest.StaticCallTest 这种调用方式是错误的。
var xx= LocalTest.StaticCallTest("hello world!", (r) =>
{
Console.WriteLine(r);
});
//本地执行 xx 为正确
//远程执行 xx 为空
Console.WriteLine("Print xx:" + xx);
if (!WindNet.RemoteCall.Instance.IsLocal)
{
//一般情况下,我们需要一个CallLoop挂在主线程上,用于执行回调,和添加请求
//这里的CallLoop是默认挂在主线程上处理请求,实际上不能这么干
//请求
WindNet.RemoteCall.Instance.CallLoop();
//获得返回 执行回调
WindNet.RemoteCall.Instance.CallLoop();
}
#endif Console.ReadLine();
}

  

1.WebHost 内部使用的Cassini的一个内嵌的Web服务器,实际部署可以通过IIS,仅为测试使用。
2.默认端口 4570
3.这部分代码仅仅是原框架抽取并不完善,所以也仅供演示。
4.性能通过反射问题不是很大,客户端和服务端都是(服务端是加速过的,比客户端快10x)
5.后续会有非静态方法的演示。
6.GameLib.exe 客户端 GameLibSV.exe 服务端
7.本方案已经有上线项目使用,WindNet.Client 兼容IOS/安卓/UWP IL2CPP版本
8.需安装PostSharp才能正常使用,不愿意装直接运行即可。无PostSharp结果会有点区别。

附:演示代码下载点我

最新文章

  1. [LintCode] Longest Common Prefix 最长共同前缀
  2. LDAP与jenkins
  3. 电脑控制台灯(c# hook,显示室温,联网校正时间)
  4. Frament 方法
  5. scandir 使用示例
  6. 使用 .gitignore来忽略某些文件【转】
  7. LoadRunner--内存指标介绍
  8. [转]linux 下使用dump和restore命令
  9. 【Apache运维基础(1)】Apache的安装与使用
  10. Xcode文档下载与安装路径
  11. Jdk5.0中出现的新特性
  12. Modelsim的自动化脚本仿真平台
  13. Javascript绝句欣赏
  14. sicp第1章
  15. ios 面试题 经典(比较全) 根据重点总结
  16. 手机访问pc网站,自动跳转到手机网站
  17. Linux下随机生成密码的命令总结
  18. 如何将R包安装到自定义路径
  19. JAVA 处理 Spring data mongodb 时区问题
  20. ●BZOJ 2669 [cqoi2012]局部极小值

热门文章

  1. 独立开发 一个社交 APP 的架构分享 (已实现)
  2. AFNetworking 3.0 源码解读(七)之 AFAutoPurgingImageCache
  3. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
  4. SharePoint 2016 必备组件离线安装介绍
  5. 利用PowerShell复制SQLServer账户的所有权限
  6. 打开程序总是会提示“Enter password to unlock your login keyring” ,如何成功关掉?
  7. Linux系统中的Device Mapper学习
  8. MyBatis3.2从入门到精通第一章
  9. 山寨Unity3D?搜狐畅游的免费开源游戏引擎Genesis-3D
  10. 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)