C++ Addon with Node.js

Node.js 2010.10.25 20:58

Node 는 V8 자바스크립트 엔진을 기반으로 동작하는 서버 사이드 자바스크립트로 V8 엔진과 유기적으로 동작할 수 있는 C/C++로 작성된 추가기능을 제공합니다.


이것은 구조적으로 추가 기능과 동적으로 공유 객체를 연결하고 C, C++ 라이브러리를 위한 연결 지점을 제공합니다.


V8 엔진도 C++ 로 작성된 라이브러리로 자바스크립트의 오브젝트를 만들거나 함수 호출등의 인터페이스에 사용됩니다.  문서화는 대부분 v8.h 헤더파일에 기록되어 있어 추가기능을 만들기 위해서는 자주 참고하게 될 것입니다. (Node의 소스 트리중 deps/v8/include/v8.h를 참고하세요.)


Node 의 동작에 있어서 가장 중요한 역할을 하는 두가지 라이브러리가 있습니다.  그것은 libev 인터페이스와, libeio 쓰레드 풀 라이브러리 입니다.


이 문서를 통해 Node.js 의 Addon 의 구조와 원리를 이해하고 직접 Native Extension 개발을 습득해봅니다.





Node는 크게 자바스크립트 언어 레이어와 C 언어 레이어로 나뉜다.  C 언어 레이어는 C++로 개발된 구글의 V8  자바스크립트 엔진은 쓰레드 풀 라이브러리인 libeio 와 이벤트 루프 라이브러리인 libev 로 시스템에서 자바스크립트이 가능하도록 하는 코어 역할을 한다.


Node binding 레이어는 Blocking POSIX 시스템을 비동기적으로 호출하기 위한 대부분의 래퍼들을 구현해 놓았다.  이것들은 Node 저장소에 있는 소스 중 src/*.cc 에 포함되어 있고 Node standard library 의 대부분이 래퍼들과 동작하게 된다.


Node standard library 레이어는 Node binding 에 구현해 놓은 래퍼들이 제공하는 API를 이용해 자바스크립트에서 효율적이고 손쉽게 시스템상에서 I/O 프로그래밍을 할 수 있도록 지원하는 서버 사이드 라이브러리 이다.


Writing Native Extension for Node


Libraries

  1. C event loop 라이브러리 (libev)
    1. http://cvs.schmorp.de/libev/ev.html
    2. 파일 디스크립터가 읽을 수 있게 되고, 타이머를 기다릴 때 혹은 신호를 받기를 기다릴때 등에서 libev 인터페이스가 필요하다.
    3. 모든 I/O 작업을 할때 libev 인터페이스는 꼭 필요하다.
  2. C thread pool 라이브러리 (libeio)
    1. http://pod.tst.eu/http://cvs.schmorp.de/libeio/eio.pod
    2. 블럭킹 POSIX 시스템을 비동기적으로 실행하는데 사용한다.
    3. Non-blocking 프로그램을 가능하게 한다.

좀더 자세한 사항은 PDF를 다운로드 받아서 보세요. :)

신고

'Node.js' 카테고리의 다른 글

C++ Addon with Node.js  (4) 2010.10.25
Posted by Rhio.kim

Titanium 으로 몇가지 테스트 겸 Ext JS 오프라인 API documentation과 Example를 오프라인 형태로 만들어 보았습니다.
Ext JS 를 자주 사용하시는 분들께는 작은 도움이 되리라 생각하면서...

요번주는 Titanium과 함께 즐거운 한주였던것 같습니다.
매우 흥미롭고 재미있습니다. 

특히 Ext JS는 알다시피 데스크탑 형태의 성숙한 UI를 제공하기 때문에 Titanium과 연계되어 그 강력함이 배가될 수 있는 가능성을 느끼게 되었던것 같습니다. :)

이 앱의 기본 동작은 링크를 클릭하여도 되고 API 나 Example 의 이동은 컨텍스트 메뉴를 통해서 쉽게 이동할 수 있습니다.  API 참조나 예제 참조를 유연하게 연결하기 위해서입니다. (사실 제가 필요한 부분을 컨텍스트 메뉴에 담은 것입니다.)

두가지 외에는 대부분 온라인으로 연결되어지게 해 두었습니다.




OSX 10.5 Intel Download Application
Linux Intel 32-bit Download Application
Linux Intel 64-bit Download Application
Windows 32-bit Download Application


ScreenShot


신고
Posted by Rhio.kim