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。
下面我们写个菲波基数作为demo尝鲜:完整项目寄宿在github:edge-demo。
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大家族。
转载于:https://blog.51cto.com/whitewolfblog/1167713
edge.js架起node.js和.net互操作桥梁相关推荐
- 顶级 Swift 服务端框架对决 Node.js
本文讲的是顶级 Swift 服务端框架对决 Node.js, 前言 最近我在做服务端 Swift 工作时,我被问到这样的问题: 「在服务端 Swift 能否击败 Node.js?」 Swift 是一个 ...
- Node.js模块化开发||Node.js中模块化开发规范
JavaScript开发弊端 a.js b.js JavaScript在使用时存在两大问题,文件依赖和命名冲突. 生活中的模块化开发 软件中的模块化开发 app.j user.一个功能就是一个模块,多 ...
- java和node.js 2018_2018,Node.js社区最值得关注的三个话题
原标题:2018,Node.js社区最值得关注的三个话题 [ ] [IT168 资讯]我们与IBM Node.js社区主管Michael Dawson进行了一次访谈,本次访谈所涉及的几个Node.js ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...
- node js fork php,Node.js中execFile,spawn,exec和fork简介
Node.js中execFile,spawn,exec和fork简介 Node.js子流程child_process模块提供四种不同方法执行外部应用: 所有这些都是异步,调用这些方法会返回一个对象,这 ...
- 理解node.js(Understanding node.js)
因为最近自己在学习node.js,刚开始学.看到这篇文章挺有意思,介绍了一下node.js有助于理解基于事件驱动的回调,就翻译了一下. 英文原文: Understanding node.js 理解no ...
- 修改js版本_啥都学点之使用nvm安装Node.js并实现Node.js多版本管理
刚开始使用Node.js的时候,直接到官网下载安装 中文站点:https://nodejs.org/zh-cn/ Node.js网站截图 当接触的项目多以后,会出现一个问题,2个项目,使用的是不同的N ...
- js学习(node.js环境)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] javascript之前一般用于web前端开发(比如jquery等等),然而由于node.js的 ...
- Node.js系列之node.js初探
官方介绍:Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable n ...
最新文章
- Android画图最基本的三个对象(Color,Paint,Canvas)
- 《The Elements of Statistical Learning》 chp3 Linear Models for Regression
- C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志
- gradle 指定springcloud 版本_springcloud小技能:服务注册发现如何隔离
- 自定义Toolbar的一些小技巧
- 模板方法模式coding
- SQL查询中having和where的异同点
- 从历史角度讲现代数学
- c++ int自动转换成无符号变量产生的问题
- Django操作原生MySQL的方法:MyModel.objects.raw()执行查询语句
- Java中使用JNA实现全局监听Linux键盘事件
- 移动项目工作笔记0002---使用Weex开发移动端应用
- 杭电1203I NEED A OFFER!
- 我的服务端JS文件合并工具
- html网页设计实验原理,网页设计实验报告
- 1.基于物品的协同过滤推荐算法理解
- Python Twisted 简介
- 【软考系统架构设计师】2015年下系统架构师案例分析历年真题
- 2021年末爆发 Log4j 的史诗级Bug漏洞?5分钟教你如何手把手实现
- @Resource和@Autowired注解的区别