好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

edge.js架起node.js和.net互操作桥梁

edge.js架起node.js和.net互操作桥梁

edge.js架起node.js和.net互操作桥梁

今天要介绍的是edge.js这个github上刚兴起的开源项目,它可以让node.js和.net之间在in-process下互操作。.net版本在4.5及以上,因为.net4.5带来的Task,asyn,await关键字和node.js的Event模型正好匹配。如果你感兴趣的话,可以参见github https://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--破狼 。

 

分类:  JavaScript ,  node.js ,  开源世界

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于edge.js架起node.js和.net互操作桥梁的详细内容...

  阅读:44次