今天要介绍的是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互操作桥梁相关推荐

  1. 顶级 Swift 服务端框架对决 Node.js

    本文讲的是顶级 Swift 服务端框架对决 Node.js, 前言 最近我在做服务端 Swift 工作时,我被问到这样的问题: 「在服务端 Swift 能否击败 Node.js?」 Swift 是一个 ...

  2. Node.js模块化开发||Node.js中模块化开发规范

    JavaScript开发弊端 a.js b.js JavaScript在使用时存在两大问题,文件依赖和命名冲突. 生活中的模块化开发 软件中的模块化开发 app.j user.一个功能就是一个模块,多 ...

  3. java和node.js 2018_2018,Node.js社区最值得关注的三个话题

    原标题:2018,Node.js社区最值得关注的三个话题 [ ] [IT168 资讯]我们与IBM Node.js社区主管Michael Dawson进行了一次访谈,本次访谈所涉及的几个Node.js ...

  4. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...

  5. node js fork php,Node.js中execFile,spawn,exec和fork简介

    Node.js中execFile,spawn,exec和fork简介 Node.js子流程child_process模块提供四种不同方法执行外部应用: 所有这些都是异步,调用这些方法会返回一个对象,这 ...

  6. 理解node.js(Understanding node.js)

    因为最近自己在学习node.js,刚开始学.看到这篇文章挺有意思,介绍了一下node.js有助于理解基于事件驱动的回调,就翻译了一下. 英文原文: Understanding node.js 理解no ...

  7. 修改js版本_啥都学点之使用nvm安装Node.js并实现Node.js多版本管理

    刚开始使用Node.js的时候,直接到官网下载安装 中文站点:https://nodejs.org/zh-cn/ Node.js网站截图 当接触的项目多以后,会出现一个问题,2个项目,使用的是不同的N ...

  8. js学习(node.js环境)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] javascript之前一般用于web前端开发(比如jquery等等),然而由于node.js的 ...

  9. Node.js系列之node.js初探

    官方介绍:Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable n ...

最新文章

  1. Android画图最基本的三个对象(Color,Paint,Canvas)
  2. 《The Elements of Statistical Learning》 chp3 Linear Models for Regression
  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志
  4. gradle 指定springcloud 版本_springcloud小技能:服务注册发现如何隔离
  5. 自定义Toolbar的一些小技巧
  6. 模板方法模式coding
  7. SQL查询中having和where的异同点
  8. 从历史角度讲现代数学
  9. c++ int自动转换成无符号变量产生的问题
  10. Django操作原生MySQL的方法:MyModel.objects.raw()执行查询语句
  11. Java中使用JNA实现全局监听Linux键盘事件
  12. 移动项目工作笔记0002---使用Weex开发移动端应用
  13. 杭电1203I NEED A OFFER!
  14. 我的服务端JS文件合并工具
  15. html网页设计实验原理,网页设计实验报告
  16. 1.基于物品的协同过滤推荐算法理解
  17. Python Twisted 简介
  18. 【软考系统架构设计师】2015年下系统架构师案例分析历年真题
  19. 2021年末爆发 Log4j 的史诗级Bug漏洞?5分钟教你如何手把手实现
  20. @Resource和@Autowired注解的区别

热门文章

  1. dmol3给定关键字不在字典中_python中的数据结构与算法(2):字典与集合
  2. spring 框架学习(一)
  3. echarts datazoom 显示的位置设置
  4. wrs-tuya-cloud
  5. vconsole 调试 查看LOG VUE在手机上调试 手机查看h5的日志
  6. HTML引用公共组件
  7. iOS-仿膜拜贴纸滚动(物理仿真)
  8. Netty - ByteBuf
  9. Linux 配置开机自启 和 修改环境变量
  10. Jfinal Generator 不需要生成带某个前缀的表名数组的方法