• 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,taskedge.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 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大家族。

     

     
  • 相关阅读:
    灌注和宝石性道法价比分析
    bzoj1912
    bzoj3504
    poj3580
    bzoj1251
    bzoj3223
    bzoj1212
    bzoj3790
    记一次惨痛的比赛
    bzoj2734
  • 原文地址:https://www.cnblogs.com/adjk/p/4936749.html
Copyright © 2020-2023  润新知