zoukankan      html  css  js  c++  java
  • 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模型正好匹配。如果你感兴趣的话,可以参见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。

       edge.js interop model

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

    效果:

    image

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

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


    作者:破  狼 
    出处:http://www.cnblogs.com/whitewolf/ 
    本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-博客园--破狼51CTO--破狼

     
  • 相关阅读:
    回到顶部
    angularjs 复选框 单选框
    关于angularjs的ng-repeat指令
    JS字符串对象
    JS的控制语句与异常
    JS的运算符
    JS的引入方式和基础规范
    z-index及透明度opacity,利用overflow设置头像
    css的定位
    css的float属性及清除浮动
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2992422.html
Copyright © 2011-2022 走看看