time 
设为首页】【收藏本站
当前位置: 主页 > JavaScript > 其它JS框架 > 架起node.js和.net互操作的桥梁edge.js使用介绍

架起node.js和.net互操作的桥梁edge.js使用介绍

时间:2013-04-09 23:10 点击:1889次 字体:[ ]




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

下面这幅图展示了edge.js在node.js和.net之间互操作的桥梁。Fun<object,Task<object>>表示输入为object类型,输出为Task<object>,后者对应node.js中的回调函数,前者则为.net方法输入参数。更多详情请参见github readme。

架起node.js和.net互操作的桥梁edge.js使用介绍_www.fengfly.com
 

下面我们写个菲波基数作为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.  }); 

效果:

架起node.js和.net互操作的桥梁edge.js使用介绍_www.fengfly.com

这里分为3类调用,直接源码嵌入node.js和文件外置,以后编译后的dll,多的不用说,其实很简单,如果你和一样同样喜欢js和.net的话。

在当下node.js刚兴起,成型的框架还不够多,或者有时我们必须以c或者c++来完成node.js的本地扩展的时候,edge.js给我们提供了另一个可选的途径就是 强大的.net大家族。

 

 

 转自:http://www.cnblogs.com/whitewolf/archive/2013/03/31/2991200.html

 



本文地址 : http://www.fengfly.com/plus/view-212410-1.html
标签: .NET node.js 互操作 edge.js
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: