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大家族。
edge.js架起node.js和.net互操作桥梁的更多相关文章
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Node.js入门:Node.js&NPM的安装与配置
Node.js安装与配置 Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0. ...
- KoaHub.js是基于 Koa.js 平台的 Node.js web 快速开发框架
koahubjs KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, A ...
- 基于 Koa.js 平台的 Node.js web 快速开发框架KoaHub.js demo 可安装
KoaHub.js demo KoaHub.js KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Fu ...
- KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-yilianyun
koahub-yilianyun 微信易联云打印机接口 koahub-yilianyun易联云打印机node接口 Installation $ npm install koahub-yilianyun ...
- Elasticsearch.js 发布 —— 在Node.js和浏览器中调用Elasticsearch(1)
继PHP.Ruby.Python和Perl之后,Elasticsearch最近发布了Elasticsearch.js,Elasticsearch的JavaScript客户端库.可以在Node.js和浏 ...
- Elasticsearch.js 发布 —— 在Node.js和浏览器中调用Elasticsearch
继PHP.Ruby.Python和Perl之后,Elasticsearch最近发布了Elasticsearch.js,Elasticsearch的JavaScript客户端库.可以在Node.js和浏 ...
- Node.js学习(Node.js基础)
1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...
- Node.js系列之node.js初探
官方介绍:Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable n ...
随机推荐
- maven install与maven package 的区别
mvn install 是将你打好的jar包安装到你的本地库中,一般没有设置过是在 用户目录下的 .m2\下面.mvn package 只是将你的代码打包到输出目录,一般的是 target下面.
- cannot find module 'cordova-common'
解决办法,重新安装cordova npm install -g cordova
- selenium判断元素类型
在做级联的下拉框时发现第一次选择了下拉框(如省份),第二个下拉框可能是输入框,也可能是下拉框,这个时候就需要判断他的元素类型,来做判断 图1 图2 原理很简单:获取控件的html文件内容,拿到内容后在 ...
- Unity3d之截图
1.Application.CaptureScreenshot("Screenshot.png", 0); 2. exture2D CaptureScreenshot2(Rect ...
- 十九、android中判断sim卡状态和读取联系人资料的方法
在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...
- Javascript之图片上传预览
使用Javascript之图片上传预览,我们无需上传到服务器中,兼容所有浏览器. 关键方法是使用微软库filter:progid:DXImageTransform.Microsoft.AlphaIma ...
- WPF button 如何区分click和doubleclick
WPF button 同时处理两个事件时候会先触发click事件,触发doubleclick事件 ,那如何区分呢,可以这样设置: private static DispatcherTimer myC ...
- hdu 1879 继续畅通工程
/************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...
- Java一些常见的出错异常处理
一些平时常见的错误及解决办法,我 是新手,每次遇到的错误都记录了下来. 1. 404错误 description The requested resource (/Struts2_0100_Intro ...
- Android中Socket通信案例
以下这个案例是基于TCP/UDP协议的. 服务端实现代码 基于TCP的服务端协议 // 声明一个ServerSocket对象 ServerSocket serverSocket = null; try ...