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/edgeEdge.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大家族。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM