edge.js架起node.js和.net互操作桥梁
2013-03-31 01:06 破狼 阅读(7346) 评论(7) 编辑 收藏 举报今天要介绍的是edge.js这个github上刚兴起的开源项目,它可以让node.js和.net之间在in-process下互操作。.net版本在4.5及以上,因为.net4.5带来的Task,asyn,await关键字和node.js的Event模型正好匹配。如果你感兴趣的话,可以参见githubhttps://github.com/tjanczuk/edge 和Edge.js overview.
下面这幅图展示了edge.js在node.js和.net之间互操作的桥梁。Fun<object,Task<object>>表示输入为object类型,输出为Task<object>,后者对应node.js中的回调函数,前者则为.net方法输入参数。更多详情请参见github readme。
下面我们写个菲波基数作为demo尝鲜:完整项目寄宿在github:edge-demo。
1 var edge = require('edge'); 2 3 var fib = edge.func({ 4 source: function() {/* 5 6 using System; 7 using System.Linq; 8 using System.Threading.Tasks; 9 10 public class Startup 11 { 12 public async Task<object> Invoke(object input) 13 { 14 int v = (int)input; 15 var fib = Fix<int, int>(f => x => x <= 1 ? 1 : f(x - 1) + f(x - 2)); 16 return fib(v); 17 } 18 19 static Func<T, TResult> Fix<T, TResult>(Func<Func<T, TResult>, Func<T, TResult>> f) 20 { 21 return x => f(Fix(f))(x); 22 } 23 24 static Func<T1, T2, TResult> Fix<T1, T2, TResult>(Func<Func<T1, T2, TResult>, Func<T1, T2, TResult>> f) 25 { 26 return (x, y) => f(Fix(f))(x, y); 27 } 28 } 29 30 */}, 31 references: ['System.Core.dll'] 32 }); 33 34 fib(5, function (error, result) { 35 if (error) console.log(error); 36 console.log(result); 37 }); 38 39 var fibFromFile = edge.func(__dirname + "/fib.cs"); 40 fibFromFile(5, function (error, result) { 41 if (error) console.log(error); 42 console.log(result); 43 }); 44 45 var fibFromDll = edge.func({ 46 assemblyFile: 'edge.demo.dll', 47 typeName: 'edge.demo.Startup', 48 methodName: 'Invoke' 49 }); 50 fibFromDll(5, function (error, result) { 51 if (error) console.log(error); 52 console.log(result); 53 });
效果:
这里分为3类调用,直接源码嵌入node.js和文件外置,以后编译后的dll,多的不用说,其实很简单,如果你和一样同样喜欢js和.net的话。
在当下node.js刚兴起,成型的框架还不够多,或者有时我们必须以c或者c++来完成node.js的本地扩展的时候,edge.js给我们提供了另一个可选的途径就是 强大的.net大家族。
作者:破 狼
出处:http://www.cnblogs.com/whitewolf/
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客、博客园--破狼和51CTO--破狼。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2012-03-31 Green.AgileMapper项目(2)-新增DO和DTO代码生成