通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码。在本文 中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制。随后将探 讨一些Edge.js应用场景,它在这些场景中可以为你开发Node.js程序提供帮助。
为何要使用Edge.js?
虽然许多应用程序只能用Node.js编写,不过有些 情况下又需要综合Node.js和.NET两者的优点。基于以下几个理由,你想要在程序 中使用.NET和Node.js:.NET框架和NuGet包提供了一个丰富的功能生态系统,它 很好地补充了Node.js和NPM模块;可能你希望在Node.js程序中重用某些现成 的.NET组件;也可能想使用多线程CLR运行CPU密集型的计算,而这绝非是单线程 的Node.js所擅长的;又或者你可能优先选择使用.NET框架和C#而不是使用C/C++ 编写原生的Node.js扩展来访问那些尚未通过Node.js暴露的操作系统机制。
一旦你决定在程序中使用Node.js和.NET,那么你必须将Node.js和.NET的组件 用进程壁垒将两者分离开来,并建立某种形式的进程间通信的机制,比如说HTTP :
Edge.js提供另一种类似的组建异构系统的方式。它允许你在单一进程 中同时运行Node.js和.NET代码,并且提供了V8和CLR之间的互操作机制。
使 用Edge.js可以在一个进程中运行Node.js和.NET,而不用将其分割为两个进程, 这样有两个主要的好处:更好的性能和更低的复杂性。
某个场景的性能测 试显示,从Node.js向C#发出的进程内Edge.js请求比两个进程间通过HTTP发送的 相同请求快32倍。与两个进程和进程间的通信信道相比,只处理一个单独的进程 ,明显降低了你需要解决的部署和维护的复杂性。
.NET欢迎 Node.js
接下来我将用一个基础实例讲解Edge.js的关键概念,这个例子是 从Node.js向C#发送请求。
第 1行引入事先从NPM安装的edge模块。Edge.js是一个原生的Node.js组件。Edge.js 的特殊之处在于,它被加载的时候便在node.exe进程内部开始代管CLR。