CAFE

ASP.NET WEBFORM

Edge.js = Node.js + .NET 알아보기

작성자심재운|작성시간13.08.20|조회수4,324 목록 댓글 6

Edge.js = Node.js + .NET


Edge.js 는 하나의 프로세스에서 node.js 와 .net 이 운영게끔 해줍니다. node.js 에서 .net 함수를 호출할 수 있으며,.net 에서 node.js 함수 호출도 가능합니다. edge.js 는 CLR(Commmon Language Runtime) 과 V8 사이에 마샬링 데이터를 관리해 줍니다.  또한 하나의 스레드된 V8 와 멀티 스레드 CLR 의 스레드 모델 사이를 중개역할 해 줍니다. CLR 코드는 재컴파일 또는 C#, 파이선 소스와 같이 특화된 부분도 가능 합니다. edge.js 는 c# 또는 ironPython 스크립트로 실행이 런타임시 실행할 수 있습니다. edge.js 는 C #이나 IronPython과 이외의 다른 CLR 언어가 plugged in 할 수 있습니다

더 많은 자료는 해당 사이트를 확인해 보시기 바랍니다. : https://github.com/tjanczuk/edge.

시작하기에 앞서서:

  • node.js 사이트에서 node.js 을 다운로드 합니다. (http://nodejs.org/download/)
  • ommand prompt 를 실행합니다.
  • node 를 실행할 위치를 선택 합니다.
  • npm install edge 를 통해 설치 합니다.


image




hellocsharp.js 파일을 만들고 아래와 같이 코딩을 구현합니다.


var edge = require('edge');

var helloWorld = edge.func('async (input) => { return ".NET Welcomes " + input.ToString(); }');

helloWorld('xxJavaScript', function (error, result) {
    if (error) throw error;
    console.log(result);
});




node hellocsharp.js 와 같이 실행해 봅니다.


image
 
 

 

 


Edge.js - Running Node.js and .NET in One Process

 

Edge.js = Node.js + .NET


c# 은 광대하며 다양한 어플리케이션에서 개발하는데 사용될 수 있는 static type 프로그래밍 언어 중에 가장 파워풀하다고 말씀드리고 싶다. node.js  는 xxjavascript 플렛폼을 server side 단에서 실행하는 것을 의미하며, V8 자바스크립트 엔진 상에서 고성능 확장 가능한 어플리케이션을 구현하는데 사용될 수 있다.


.NET 은 NuGet 에서 11,000 packages 보다 더 많이 제공하고 있으며, node.js 는 npm 에서 30,000 modules 보다 더 많이 제공합니다. 이는 우리가 한 공간에서 . NET과 Node.js 플랫폼 모두를 사용할 수 있다면 이는 매우 좋을 겁니다. edge.js 가 .net 환경에서 실행할 개발자분들에게 Node.js npm module 을 구현 가능하게끔 해줍니다. 이는 하나의 프로세스에서 node.js 를 실행하며, node.js 와 .net 간의 기능을 호출 가능합니다.


edge.js 는 node.js 에서 C# 비동기 림다를 호출 할 수도 있습니다. .net 와 node.js 는 다른 스레드 모델을 사용합니다. 그러나 edge 는 하나의 스레드 v8, 그리고 멀티 스레드 CLR 을 핸들링 합니다. 현재 Edge.js 는 C#, F#, Python,  PowerShell 을 가지고 자바스크립트를 사용하도록 제공해 줍니다. edge.js 는 Tomasz Janczuk 에 의해 개발되었습니다. Edge.js 프레임워크는 https://github.com/tjanczuk/edge 에 있는 Github 에서 호스팅 해줍니다.



Edge.js 프레임워크을 운영하는데 있어서 아래의 환경이 요구됩니다.


Working with Edge.js


command prompt 에서 npm install edge 를 실행합니다.

image


Calling C# class from Node.js



아래 코드는 하나의 이미지 포멧에서 다른 이미지 포멧으로 이미지를 convert 하기 위해 c# 코드를 사용하여 간단한 node.js 프로그램을 구현 하였습니다.


   1:  var edge = require('edge');
   2:  var convertImage = edge.func(function() {/*
   3:  #r "System.Drawing.dll"
   4:  
   5:   using System;
   6:   using System.Threading.Tasks;
   7:   using System.Collections.Generic;
   8:   using System.Drawing;
   9:   using System.Drawing.Imaging;
  10:  
  11:   class Startup
  12:  {
  13:    static IDictionary<string, ImageFormat> formats
  14:              = new Dictionary<string, ImageFormat> 
  15:          {
  16:              { "jpg", ImageFormat.Jpeg },
  17:              { "bmp", ImageFormat.Bmp },
  18:              { "gif", ImageFormat.Gif },
  19:              { "tiff", ImageFormat.Tiff },
  20:              { "png", ImageFormat.Png }
  21:          };
  22:  
  23:  public async Task<object> Invoke(
  24:                  IDictionary<string,object> input)
  25:   {
  26:         await Task.Run(async () => {
  27:            using (Image image = Image.FromFile(
  28:                    (string)input["source"]))
  29:     {
  30:            image.Save((string)input["destination"], 
  31:                   formats[(string)input["toType"]]);
  32:         }
  33:     });
  34:  
  35:              return null;
  36:          }
  37:      }
  38:  */});
  39:   
  40:  var params = { 
  41:      source: '.\\shiju.png', 
  42:      destination: '.\\shiju.jpg',
  43:      toType: 'jpg'
  44:  };
  45:   
  46:  convertImage(params, function (error) {
  47:      if (error) throw error;
  48: console.log('The image shiju.png has been asynchronously converted to shiju.jpg');
  49:  });



위의 코드에서 c# 비동기 림다를 넣을 수 있는 edge 함수를 사용하기 위해 c# 을 사용하였습니다. 우리는 Func을 <object,Task<object>delegate 시그니처와 일치하는 호출 메서드를 사용하여 클래스 이름 모드를 사용하여 지정하도록 C # 클래스를 사용하였습니다. 

우리는 #R을 사용하여. NET 어셈블리에 대한 참조를 추가 할 수 있습니다. 위의 프로그램은 변환 로직을 C#로 작성되었습니다. 이는 PNG 형식에서 JPG 형식으로 이미지를 변환하고 Node.js.에서 호출합니다.

아래와 같이 명령 프롬프트에, node convetimage.js 을 실행하여 node.js 프로그램을 실행해 보죠.

성공할 경우, 아래와 같이 console.log 에 기재된 글 내용이 출력된다.


image


번역 : http://weblogs.asp.net/shijuvarghese/archive/2013/05/29/edge-js-running-node-js-and-net-in-one-process.aspx

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 답댓글 작성자심재운 작성자 본인 여부 작성자 | 작성시간 13.08.21 node.js 로 어디에 효과를 두실려고 하시는지 물어봐도 될까요?
  • 작성자랜덤 | 작성시간 13.09.05 저는 그냥 이대로(mvc4+angularjs)가 좋은데 위에서 연구해보라네요. 우리쪽은 암튼 내부용 프로그램이라서(사용자 약8000명) 별 득이 없을꺼 같은데, 다른팀의 public 사이트에서는 이미 node.js로 돌리는 중이고 매우 만족한다네요. 물론 거기는 사용자가 엄청 많아서 퍼포먼스가 중요하대요. 효과는 single threaded non blocking IO에서 오는 처리 능력이 가장 우선이구요 또 서버와 틀라이언트 양쪽모두 자바스크립트를 쓴다는 점, 윈도우 서버를 안써도 된다는 점(어드민을 한계통 기술로만 뽑을수 있으니까) 등등 이네요.
  • 답댓글 작성자심재운 작성자 본인 여부 작성자 | 작성시간 14.01.08 답변 감사합니다. 윈도우 서버 안써도 된다는 점이 제일 강력한 맨트네요.ㅎ
  • 작성자랜덤 | 작성시간 14.01.09 한참만에 리플다셨네요. 위의 내용에 업데이트 하자면요...
    일단 윈도우 개발자쪽에서의 강한 반대로 잠정적 보류로 결정 났구요. 퍼블릭 사이트 쪽은 ruby가 주였는데 전부 node.js로 옮기는 중입니다 물론 로직도 전부 js로 새로 쓰는 중이구요.
    참고로 제가 하는 프로젝트는 그사이에 ServiceStack(https://servicestack.net)을 새로 적용해서 약50% 정도의 perfomance 증가를 가졌습니다. 요즘은 PostSharp(http://www.postsharp.net) 를 이용해서 AOP를 구현중에 있습니다. PostSharp은 첨엔 그냥 그랬는데 구현해보니 코드를 참 간결하게 만들수 있게 도와주네요. 강추합니다. 특히 기존프로젝트에 로깅이나 보안같으거 새로 넣을때는요.
  • 답댓글 작성자푸하하3 | 작성시간 14.01.22 심재운님은 아니지만 저도 궁금 했는데 답변 감사합니다 ^^
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼