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/archive/2013/03/31/2991200.html,如需转载请自行联系原作者


目录
相关文章
|
2月前
|
Web App开发 缓存 JavaScript
【安装指南】nodejs下载、安装与配置详细教程
这篇博文详细介绍了 Node.js 的下载、安装与配置过程,为初学者提供了清晰的指南。读者通过该教程可以轻松完成 Node.js 的安装,了解相关配置和基本操作。文章首先介绍了 Node.js 的背景和应用场景,随后详细说明了下载安装包、安装步骤以及配置环境变量的方法。作者用简洁明了的语言,配以步骤图示,使得读者能够轻松跟随教程完成操作。总的来说,这篇文章为初学者提供了一个友好的入门指南,使他们能够顺利开始使用 Node.js 进行开发。
196 1
【安装指南】nodejs下载、安装与配置详细教程
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
3月前
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
35 0
|
3月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(上)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
42 0
|
19天前
|
JavaScript Windows
NodeJS 安装及环境配置
NodeJS 安装及环境配置
|
28天前
|
Linux 开发工具 git
node使用nrm 管理托管node的安装源
node使用nrm 管理托管node的安装源
43 1
|
1月前
|
Web App开发 JavaScript 前端开发
Windows 10上安装Node.js的初学者指南
Node.js是是一个强大的JavaScript运行时环境,建立在Chrome的V8 JavaScript引擎上,让你能够在服务器端运行JavaScript。 通过本教程,你将学会如何设置Node.js和npm(节点包管理器等现代Web开发的必备工具。无论你是希望构建Web应用程序、创建服务器端脚本,还是涉足全栈开发,安装Node.js都是你的第一步。那么,让我们开始吧!
|
2月前
|
JavaScript
记录安装nodejs遇到的问题及解决
最近在搭建网站,需要用到nodejs,在配置的时候遇到3个问题,经过搜索和自己思考,把遇到的问题和解决方案记录下来,以供参考
|
2月前
|
JavaScript Windows 内存技术
通过Nvm安装和管理NodeJS
通过Nvm安装和管理NodeJS
112 0
通过Nvm安装和管理NodeJS