博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
edge.js架起node.js和.net互操作桥梁
阅读量:5749 次
发布时间:2019-06-18

本文共 1647 字,大约阅读时间需要 5 分钟。

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

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

   edge.js interop model

   下面我们写个菲波基数作为demo尝鲜:完整项目寄宿在github:。

 

var edge = require('edge');

 

var fib = edge.func({

    source: function() {/*

 

using System;

using System.Linq;

using System.Threading.Tasks;

 

public class Startup

{

public async Task<object> Invoke(object input)

{

int v = (int)input;

var fib = Fix<int, int>(f => x => x <= 1 ? 1 : f(x - 1) + f(x - 2));

return fib(v);

}

 

static Func<T, TResult> Fix<T, TResult>(Func<Func<T, TResult>, Func<T, TResult>> f)

{

return x => f(Fix(f))(x);

}

 

static Func<T1, T2, TResult> Fix<T1, T2, TResult>(Func<Func<T1, T2, TResult>, Func<T1, T2, TResult>> f)

{

return (x, y) => f(Fix(f))(x, y);

}

}

 

*/},

    references: ['System.Core.dll']

});

 

fib(5, function (error, result) {

    if (error) console.log(error);

    console.log(result);

});

 

var fibFromFile = edge.func(__dirname + "/fib.cs");

fibFromFile(5, function (error, result) {

    if (error) console.log(error);

    console.log(result);

});

 

var fibFromDll = edge.func({

    assemblyFile: 'edge.demo.dll',

    typeName: 'edge.demo.Startup',

    methodName: 'Invoke'

});

fibFromDll(5, function (error, result) {

    if (error) console.log(error);

    console.log(result);

});

效果:

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

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

 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/1167713,如需转载请自行联系原作者

你可能感兴趣的文章
UBUNTU 配置JDK环境
查看>>
SQL 调试:无法启动 T-SQL 调试。未能附加到 SQL Server 进程
查看>>
Java中getResourceAsStream的用法
查看>>
DS第七章学习小结
查看>>
Text Justification
查看>>
SpringBoot(八)_springboot集成swagger2
查看>>
微服务架构介绍
查看>>
Java堆栈解析
查看>>
部署Replica Sets及查看相关配置
查看>>
倒序显示数组(从右往左)
查看>>
STL学习笔记-- queue
查看>>
关于unity rect的坑
查看>>
Linux编程 18 安装软件程序(yum工具对软件包安装,删除,更新介绍)
查看>>
Python学习笔记
查看>>
CSS中的大于号肿么就不好用那?
查看>>
如何将Console application的Program函数变成支持async的?
查看>>
C++_标准模板库STL概念介绍3-函数对象
查看>>
LeetCode2_Evaluate Reverse Polish Notation评估逆波兰表达式(栈)
查看>>
设计模式3——单例模式Singleton
查看>>
文献综述二:UML技术在行业资源平台系统建模中的应用
查看>>