node.js를 사용할 때 npm 호환성이나 node.js 안정성 등의 문제로 여러 버전의 node.js를 사용해야 할 때가 있다.

요즘은 이런 문제를 해결하기 위한 툴이 다른 프로그래밍 언어들에도 있다.

좀 문제는 대부분 linux만 지원하고 windows는 지원하지 않는 경우가 많다.


node.js의 nodist는 windows에서 사용할 수 있어서 windows에서 node.js를 사용하는 경우 이 툴로 설치 하기를 추천한다.


공식 주소. https://github.com/marcelklehr/nodist


컴퓨터에 여러 버전의 node.js를 설치하고, 선택할 수 있다.


특정 디렉토리만 특정 버전의 node.js를 사용하는 것도 가능하다.


만약 이미 node.js가 설치 되어 있다면 먼저 제거 하고 설치한다.



사용 법

- 설치 가능한 버전 보기: nodist dist

- 사용 하고 싶은 버전 설치하기: nodist + v4.3.0

- 임의의 버전 선택 사용하기: nodist 4.3.0 

- 특정 디렉토리만 특정 버전 사용하기: nodist local 4.3.0

by 흥배 2016.10.28 08:00

출처 'Windows/Mac/iPhone/Android 에서 동작하는 최강의 게임 환경을 JavaScript로 손에 넣을 수 있었던 단 한가지 방법'(http://niconare.nicovideo.jp/watch/kn611) 라는 슬라이드 문서이다.


RPG쯔꾸르MV에서 어떻게 해서 게임을 멀티플랫폼을 지원하는 게임을 만들어내는지 간단하게 설명하고 있다.


RPG쯔꾸르MV는 간단하게 RPG를 만들 수 있는 소프트웨어.



RPG쯔꾸르로 게임을 만든 후 빌드시키면  HTML5 로 난온다.

 

쯔꾸르를 지지하는 기술

* html5가 기본

- Android/iPhone는 cordova를 통해서 네이브티브화 시킨다.

- 카메라나 GPS도 쯔꾸르에서 사용할 수 있슴


* Windows / Mac 용은 NW.js

- 이건 Node로 동작


* 렌더링은 Pixi.js

- WebGL 이나 Canvas를 사용한다. 스마트폰에서 완전 같게 동작한다.


* 플러그인은 모두 JavaScript

- 뭐든지 할 수 있다.


게임 데이터는 모두 json

읽기 쉽다!



RPG쯔꾸르처럼 멀티플랫폼 게임을 만들 수 있는 툴을 만들고 싶다면 아래 기술을 참고

NW.js: http://nwjs.io/

pixi.js: https://pixijs.github.io/docs/



RPG쯔꾸르MV로 만든 온라인 게임  https://kyubuns.net/MMOM/

by 흥배 2016.10.24 08:00





Node.js Tools for Visual Studio의 사용을 시작하려면

Visual Studio에서 Node.js 애플리케이션의 개발을 추진하려면 우선 Node.js Tools for Visual Studio(영어)을 다운로드 한다. Node.jsAzureAzure 서비스에서 완전gkrp 지원되는 것으로, 어플리케이션 배포와 감시를 할 준비가 완료되면 이를 활용할 수 있다. Visual StudioAzure를 조합하면 개발 라이프 사이클 전체에서 뛰어난 경험을 이용할 수 있다.

 

GitHub 이행

[2015년 4]: 우리는 항상 고객의 소리에 귀을 기울이고 있다. 그 결과 Node.js Tools for Visual StudioGitHub에 이행하기로 했습니다(영어). Node.jsJavaScript의 커뮤니티가 GitHub에 있으므로 이 이행은 자연스러운 일이었는지도 모. GitHub의 활발한 커뮤니티의 일원이 되고 여러분과 협력하기를 무척 기대하고 있다. 중간에 다소 주춤할지도 모르지만, 넓은 아량으로 이해하기 바란다.

출처: http://blogs.msdn.com/b/visualstudio/archive/2015/03/25/node-js-tools-1-0-for-visual-studio.aspx




by 흥배 2015.04.27 08:00

Visual Studio Add-in 으로 Node.js 개발을 할 수 있는 NTVS의 RC2 버전 출시

http://nodejstools.codeplex.com/


변경 사항은 

1. 안정성 향상과 속도 향상.

2. TypeScript를 전반적으로 지원

3. 서버 실행 중 파일 추가

4. "Install New npm Packages" 다이얼로그 숏트 키 추가(Ctrl+K, G)



node.js 버전은 0.10.33을 추천.

VS 2012, VS 2013 에서 사용 가능.

by 흥배 2015.01.22 08:00

Windows 플랫폼 경험자 중 Node.js로 개발할 때 Tool이 부실하다고 생각된다면 

Node.js Tools for Visual Studio를 추천.


현재 1.0 베타 버전까지 나와 있다.

https://nodejstools.codeplex.com/


오픈소스 툴이며, Visual Studio는 Express 버전이라도 사용할 수 있다.





by 흥배 2014.04.05 13:48

원본은 http://namoda.springnote.com/pages/11493094 입니다.

스프링노트가 종료 예정이라서 부득불하게 글을 가져왔습니다 -_-;;;;;;

 

 

 

윤인성님이 지은 '모던 웹을 위한 Node.js 프로그래밍'책을 보다가

부록C에 있는 바이너리 모듈 부분을 보다가 '이번 장에서 다루는 내용은 윈도에서 작업이 불가능합니다'라는 글이 있었다.

왜 윈도우는 안될까?라는 생각을 하면서 뭔가 방법이 있을 것 같아서 찾아봤다.
이 글 아래에 있는 아르헨티나에 있는 Javier Santo Domingo님이 잘 정리한 내용을 참고해서 다시 정리합니다.

   

Add-on이란?

Add-on은 동적으로 링크되는 공유 오브젝트라고 보시면 됩니다. 유닉스 계열에서는 .so라이브러리라고 보시면 될 것 같고, 윈도우에서는 .dll 라이브러리라고 생각하시면 되겠습니다.

자세한 것은 송형주 님이 번역하신 Node.js 도움말 번역 – C/C++ Add-on 작성 관련 이나 Rhio.Kim님의 C++ Addon with Node.js를 보시면 좋을 것 같습니다. node.js extensionswith C++ and V8 (Konstantin Käfer)

또한 구글의 V8에 대해 알고 있으면 도움이 됩니다.

또한, node.js Manual & Documentation의 Addons를 참고하시면 됩니다.

   

윈도우는 DLL지옥이라는 말이 있을 정도로 운영체제가 철저하게 DLL을 기반으로 동작합니다.

일례로 프로세스를 생성할 때도 kernel32.dll안에 있는 함수를 이용해야 합니다.

node.js 확장코드 역시 dll을 기반으로 확장할 수 있습니다.(장점인지 단점인지...)

물론 C코드와 DLL이 어떻게 동작하는지 안다고 가정하고 씁니다. 모를 경우에는 제프리리처의 Windows C/C++를 보시길 권장합니다.

   

방법

  • node.js 동작하기 위한 환경은 마련되어 있다고 가정합니다. (nodejs.org애서 Download에서 .msi 패키지를 받아서 설치하면 끝)
  • 윈도우 개발환경도 구축되어 있다고 가정합니다. 상용 VS가 없다면 express 버전을 무료로 사용하시면 됩니다.(물론 윈도우 SDK는 추가로 설치하셔야 겠지요)
  • node.js 소스코드를 다운받습니다.
  • 소스코드를 압축해제 도구로 풉니다. 알집이던 7zip이던 대부분 압축 유틸 도구로 푸실 수 있습니다.
    명령어 도구를 선호하신다면 tar로 푸셔도 됩니다. 전 7zip을 이용했습니다(무료라서)
  • gz안에는 tar가 있고 tar에야 드디어 원하는 node-v0.6.17 형태의 디렉토리가 있습니다.
  • 저는 c:\node-v0.6.17 에 아래 그림과 같이 풀었습니다.
  • 저희가 소스를 필요로 하는 것은 node.exe를 만들기 위함이 아니라 addon 코드를 빌드시 필요한 헤더파일등이 필요하기 때문입니다. c코드(.cc)는 사실 필요없습니다. 구현코드는 정적라이브러리인 node.lib에서 가져올 것이니깐요.
    이후에 다시 언급하겠지만 저희가 필요한 것은 아래와 같습니다
    C:\node-v0.6.17\deps\v8\include    // v8.h 가 있습니다.
    C:\node-v0.6.17\src                    // node.h 가 있습니다.
    C:\node-v0.6.17\deps\uv\include // uv.h 가 있습니다.
  • node.lib 파일 구하기
  • 사실 소스코드를 빌드하면 만들 수 있지만, 빌드를 위해서는 파이선 2.x를 설치해야 하더군요.
    물론 저는 파이썬을 이미 사용하고 있지만 별도로 뭘 설치하는 것이 번거롭잖아요.
  • 아까 다운로드 받은 소스에 보면 'Other release files'라는 링크가 있습니다.
  • 클릭을 해보시면 http://nodejs.org/dist/v0.6.17/ 로 연결이 됩니다. 목록중에 node.lib 파일을 다운받습니다.
    64비트 환경이라면 x64/ 하위에서 64비트로 컴파일된 파일들을 받을 수 있습니다.
    여담이지만, 64비트용 node 설치패키지(node-v0.6.17.msi)도 여기서 찾을 수 있습니다.
  • addon을 위한 프로젝트생성
  • 파일 > 새로 만들기 > 프로젝트 를 선택하여 "새 프로젝트"에서
  • Visual C++ > Win32 > Win32 프로젝트 선택후 이름하고 위치를 입력해줍니다. 저는 편의상 아래와 같이 입력했습니다.
    이름: hellonodejs (마음대로..)
    위치: C:\node-addon
  • Win32 응용 프로그램 마법사 에서는 그냥 "다음" 버튼(마침을 누르지 마셈)
  • 다음 나오는 창에서 아래를 선택하고 "마침"을 누릅니다.
    응용 프로그램 종류: DLL(D)
    추가 옵션: 빈 프로젝트 체크
  • 소스코드 추가 (hellonodejs.cpp)
  • #include <node.h>

    #include <v8.h>

    using namespace v8;

    #pragma comment(lib"node.lib")

  •  

    extern "C" void NODE_EXTERN init (Handle<Object> target)

    {

       HandleScope scope;

       target->Set(String::New("hello"), String::New("world"));

    }

  • 라이브러리 복사 및 참고 지시어 추가
  • hellonodejs.cpp 와 동일한 디렉토리에 node.lib 파일을 복사해줍니다. (이동하던...)
  • include 디렉토리 설정 추가
  • 솔루션 탐색기에서 hellonodejs 오른쪽 클릭 [속성]에서
  • 구성(C): 모든 구성 을 선택 후(Debug 뿐 아니라 Release도 바꿔야 하는데, 각각 바꾸려면 귀찮찮아요..)
  • [구성 속성]-[C/C++]-[일반]의 추가 포함 디렉터리에 아래를 입력해줍니다.
    C:\node-v0.6.17\deps\v8\include;C:\node-v0.6.17\src;C:\node-v0.6.17\deps\uv\include
  • 빌드를 하다보면 stdint.h 파일이 없다고 투덜투덜대는데,
    Visual C++ 10.0(2010) 미만의 버전에서는 이 파일이 없을 겁니다. (C99에서 새롭게 도입되었기 때문에...ㅡㅜ)
    이럴 경우 http://msinttypes.googlecode.com/svn/trunk/stdint.h 를 사용하시거나
    귀찮으시면 그냥 C:\node-v0.6.17\deps\v8\include\v8stdint.h 파일을 복사해서 stdint.h 이름으로 만듭니다.
  • 빌드
  • 빌드를 하면 경고가 하나 뜨는데 어쨌든 .dll 파일은 만들어집니다.
  • c:\node-v0.6.17\src\node_object_wrap.h(57) : warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'에서는 class 'node::ObjectWrap'의 클라이언트에서 DLL 인터페이스를 사용하도록 지정해야 합니다.

    (class 'v8::Persistent<T>' needs to have dll-interface to be used by clients of class 'node::ObjectWrap')
    1>        with
    1>        [
    1>            T=v8::Object
    1>        ]

  • node_object_wrap.h에서 정의한 handle_이라는 애가 문제인데요
  1.   v8::Persistent<v8::Object> handle_; // ro
  2. node네임스페이스의 ObjectWrap 라는 클래스안의 public 맴버 handle_가 DLL 인터페이스를 사용하도록 지정이 안되었나보다.
  3. 실행하기
  4. 생성된 .dll을 .node로 바꾸어야 한다.
    > copy hellonodejs.dll hellonodejs.node
  5. node 명령 인터프리터(REPL; Read Eval Print Loop)로 들어가서
    > node
  6. require("./hellonodejs").hello 를 수행
    > var hello = require("./hellonodejs")
    > hello.hello

    녹색의 'world'라는 output이 나왔다!
  7. 대조군...
  8. 혹시나 사기치는 거 아냐? 라고 의심할 수 있으니.. hellonodejs.node 가 없을 때 벌어지는 일을 수행해 보았다.
  9. hellonodejs.node를 지우고
    > del hellonodejs.node
  10. #10에서 수행한 것을 동일하게 수행
  11. 모듈을 찾을 수 없다고 에러가 난다.
  12. 결론: hellonodejs.node 가 있기에 'world'라는 글씨가 찍힌 것이다!

       

    소스코드를 바꾸어보자

    첫 번째 코드는 단순히 모듈의 hello라는 세터에 대해 "world"라는 문자열을 반환하게 했다.

    이번에는 hello라는 함수로 바꾸어 봅시다.

    hellonodejs.cpp (이름을 helloaddon 등으로 했어야 하는데.. 바꾸자니 또 뭐하고..)

  13. #include <node.h>

    using namespace v8;

    #pragma comment(lib"node.lib")

     

    Handle<Value> Method(const Arguments& args) {

       HandleScope scope;

       return scope.Close(String::New("world"));

    }

     

    void init(Handle<Object> target) {

       NODE_SET_METHOD(target, "hello", Method);

    }

     

    NODE_MODULE(hellonodejs, init)

    이번에 실행을 해보면 .hello라고 치면 문자열이 나오는 것이 아니라 함수라고 [Function]이라는 반환이 나온다.

    함수는 괄호로 이용해서 실행을 해야하지..

       

    윈도우에서 AddOn 쓴다는 것은?

    자바스크립트의 한계를 넘어서 윈도우 API를 사용할 수 있다는 것입니다.

    샘플로 현재 시간을 출력하는 함수를 만들어보겠습니다. 물론 자바스크립트에는 Date라는 객체가 있어서 날짜를 가져올 수 있습니다만,

    윈도우 API중에 GetLocalTime이라는 함수를 모듈화 해보겠습니다.

    hellonodejs.cpp (아래 굵은 부분이 추가)

    윈도우 API 함수의 선언이 포함되어 있는 windows.h를 우선 include하고, Now라는 핸들러 함수를 만들었습니다.

  14.    

    #include <node.h>

    using namespace v8;

    #pragma comment(lib"node.lib")

     

    #include <Windows.h>

     

    Handle<Value> Method(const Arguments& args) {

       HandleScope scope;

       return scope.Close(String::New("world"));

    }

     

    Handle<Value> Now(const Arguments& args) {

       const int SizeBuf = 25;

    1. HandleScope scope;

      SYSTEMTIME st;

      GetLocalTime(&st);

      char szTime[SizeBuf];
      sprintf_s(szTime, SizeBuf, "%d-%02d-%02d %02d:%02d:%02d.%03d",
         st.wYear, st.wMonth, st.wDay,
         st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);


      return scope.Close(String::New(szTime));

      }

       

      void init(Handle<Object> target) {
         NODE_SET_METHOD(target, "hello", Method);
         NODE_SET_METHOD(target, "now", Now);

      }

       

      NODE_MODULE(hellonodejs, init)

    실행해보면,,,

    현재 시간을 가지고 있는 문자열을 찍어줍니다. JSON 형태로 반환하게 하는 것이 좋을지도 모르겠습니다.

    이상으로 제가 쓰는 글은 마치고, 윈도우에서 C/C++ 애드온을 방법을 알려준 하비에르씨의 글을 아래 적습니다.

       

    Building a Node.js Windows C/C++ Addon

    BNWCA.pdf

    (번역 by 나모)

  • 소개
  • 윈도우 운영체제에서 node.js를 위한 애드온(addon)작업을 방금 마쳤습니다. 물론 단순한 "hello world" node.js 애드온이었지만, 4시간에 걸쳐서 끝냈다. 다른 누군가도 저와 동일한 작업을 수행하기 원할 것이고, 맨땅에 헤딩을 하지 않기 위해서 간단하게 수행법을 기록하였습니다.
  • 방법
  • Node.JS 소스코드를 다운로드
  • node.lig 파일을 얻기위해 빌드
  • Visual C++에서 DLL 프로젝트를 생성
  • File > New Project 선택 (참고로 원저자는 myaddon이라는 이름을 선택)
  • Visual C++ > Win32 선택
  • Win32 프로젝트 선택후
  • Win32 애플리케이션 마법사 > 애플리케이션 설정 : 타입을 DLL
  • 당신의 addon 코드를 작성
  • 코드를 추가. 원저자는 아래의 코드 추가
  • extern "C" void NODE_EXTERN init (Handle<Object> target)
    {
       HandleScope scope;
       target->Set(String::New("hello"), String::New("world"));
    }
  • 당신의 코드에 node.lib에 대한 참조를 추가. 전처리구문을 추가
  • #pragma comment(lib, "c:\\node.js\\src\\Debug\\node")
  • include가 필요한 디렉토리들을 컴파일러가 알 수 있도록 설정
  • "c:\node.js\src\deps\uv\include\;
  • c:\node.js\src\deps\v8\include\;
  • C:\node.js\src\src\"
  • addon을 빌드
  • 당신의 addon을 컴파일해서 .dll 형태의 파일로 얻기위해 빌드 (F7을 누르기)
  • 이름을 .node로 바꾸기(바꾸는 것이 귀찮다면 프로젝트 설정에서 프로퍼티(Properties)|일반(General)에서 .node로 설정)
  • .node 파일을 node.exe 디렉토리와 동일한 곳에 복사한다.
  • addon을 실행한다
  • C:\node.js>node
  • > require("./myaddon").hello
  • 'world'

       

    아래는 애드온을 찾다가 기록

    tistory : C++ Addon with Node.js [PDF]

    => Writing Native Extension for Node

    => waf (The meta build system) : http://code.google.com/p/waf/

    slideshare :  Writing native bindings to node.js in C++

    Olivier Lalonde's blog :  How to write your own native Node.js extension

    > git clone git://github.com/olalonde/node-notify.git

    > npm install notify

       

     

     

     

     

    node.js 비동기 addon작성

    윈도우의 콜백을 node.js에서 사용하기 위해서 addon으로 구현하고 있었다.

    문제는 아래와 같이 작성하면, 아에 블록이 되어 버린다는 것이다.

  1. Handle<Value> CallbackHandler(const Arguments& args) {

      HandleScope scope;

       

      if(!args[0]->IsFunction()) {

               return scope.Close(Undefined());

      }

       

      Local<Function> cb = Local<Function>::Cast(args[0]);

      const unsigned argc = 1;

      Local<Value> argv[1] = { Local<Value>::New(String::New("hello world")) };

      Sleep(10000);               // 뭔가오래걸리는작업

      cb->Call(Context::GetCurrent()->Global(), argc, argv);

       

      return scope.Close(Undefined());

    }

       

    여러가지 방법을 찾아보았는데 비동기 함수 콜백을 위해서는 libuv의 uv_queue_work를 이용하면 가능했다.

    바톤이라는 구조체를 이용해서 오래걸리는 작업(블록이 되는)을 시작, 끝 함수 포인터를 지정해서 큐에 넣는 식이었다.

    아래 소스코드에서 AsyncWork, AsyncAfter 가 오래걸리는 작업, 작업 후에 정리하는 함수의 이름이다.

    또한 Baton 이라는 구조체가 중간에 매개가 되는 변수이다. 

  2. Handle<Value> Async(const Arguments& args) {

        HandleScope scope;

       

        if (!args[0]->IsFunction()) {

            return ThrowException(Exception::TypeError(

                String::New("Callback function required")));

        }

        Local<Function> callback = Local<Function>::Cast(args[0]);

       

        Baton* baton = new Baton();

        baton->request.data = baton;

        baton->callback = Persistent<Function>::New(callback);

       

        uv_queue_work(uv_default_loop(), &baton->request, AsyncWork, AsyncAfter);

       

        return scope.Close(Undefined());

    }

    include하는 라이브러리중에 #include <uv.h> 가 바로 그것이다!

    Writing native bindings to node.js in C++ 슬라이드의 28쪽이나

    node.js extensionswith C++ and V8 슬라이드의 여기를 보면된다. (참고로 여기는 좌우 화살표로 슬라이드 조절이 된다)

     

by 흥배 2012.09.26 13:26

Node.js 코드를 Windows에서 직접 빌드하기 위해서는 소스 코드에서 VC++ 프로젝트 파일을 생성해야 합니다.


Node.js의 빌드 시스템은 파이썬의 gyp 형식을 사용합니다. 그래서 먼저 파이썬 2.7 버전이 설치 되어 있어야 합니다.



1. http://www.nodejs.org 에서 소스 코드 다운로드 후 압축 풀기


2. (설치 되어 있지 않다면)파이썬 2.7 버전 설치. 환경설정에서 Path에 등록하기


3. 콘솔 창을 실행한 후 Node.js 소스가 있는 곳에서(여기서는 node-v0.8.5)에서 vcbuild.bat 실행




4. node-v0.8.5/tools/gyp/tools 디렉토리에서 pretty_sln.py 실행




5. node-v0.8.5 디렉토리에 솔루션 파일이 생성됨





ps : 그런데 아직 VS2012에서 직접 빌드는 해보지 않았습니다^^;


2012.08.24 : 0.8.8 버전 소스를 받아보니 위에서 3번까지만 하면 프로젝트 파일과 빌드까지 다 해줍니다.^^

by 흥배 2012.08.23 09:00

일본의 Developer Summit 2012의 발표에서 발췌

 

DeNA에서 그룹 기업인 미국 ngmoco사와 제휴 아래 스마트 폰용 크로스 플랫폼 게임 엔진 「ngCore(ngCore Client)()를 개발·제공하는 것과 동시에 주변 소프트웨어의 개발도 진행하고 있다. 하나는 Node.js를 베이스로 하는 JavaScript로 게임 서버 개발을 지원 하는 「ngServer. 그리고 또 하는 ngCore를 이용한 게임 개발 환경/라이브러리의 「ngGoBuilder」이다.

 

 

DeNA에서는 스마트 폰용 소셜 게임 개발 플랫폼으로서 클라이언트 앱 개발용의 게임 엔진 「ngCore(ngCore Client), 개발 툴의 「ngBuilder(ngGoBuilder)를 제공하고 있으며 소셜 게임의 서버 사이드 구현을 지원하는 「ngServer」를 현재 개발 중이다.

 

ngServerNode.js를 베이스로 한 서버 사이드 체제. Node.js를 채용하고 있는 이유로 「보다 많은 접속 수에 대처할 수 있는 것」.

 

「특히 스마트 폰용  소셜 게임에서는 리얼타임의 요구가 증가하여 이른바 C10K 문제가 현실성을 띠어 오고 있다. 그 때문에 대량의 동시 접속을 처리하는데 충분한 성능을 발휘할 수 있는 것이 중요한 포인트」

 

그 밖에도 Node.js는 메모리 사용 효율이 뛰어나다 「스레드를 사용한 서버 프로그램과 비교하면 꽤 유효하게 메모리 자원을 사용할 수 있다」라고 한다.

 

이미 Node.js 서버를 사용하여 서비스를 전개하고 있는 Mobage의 소셜 게임으로 「SKYFALL」와「VIP LIFE2. 이것들은 DeNA의 그룹 회사인 미국 ngmoco사의 타이틀로 미국의 Android 마켓 등에서 베타 공개되고 있다.

 

이러한 게임 개발에서는 Node.js의 버전 업이 너무 빨라서 모듈의 업데이트를 따라갈 수 없는 것처럼 Node.js를 채용하면서 문제가 되기도 하였다. 그 중에서도 제일 고생한 것이 CPU 스파이크 문제라고 한다.

 

 「일정한 부하가 걸린 상태로 운용하고 있으면 어느새 인가 CPU 스파이크가 발생하였다. 좀처럼 그 원인을 특정할 수 없었지만 최종적으로는 Node.js 자체의 문제인 것을 알았다」

그 근본적인 원인은 Node.js가 채용한 JavaScript 엔진 「V8」의 GC(가베지 컬렉션)애서 큰 힙 메모리가 확보되었을 때에 같은 문제가 일어났다고 한다. Node.jsV8의 업데이트를 따라 가기 때문에 만약 신 버전의 V8에 미지의 약점이 있다면 그대로 Node.js에도 발생해 버린다. 프로덕션의 서버에서는 Node.js의 릴리스 버전을 사용할지, 혹은 커스터 마이즈 버전으로 운용할지 등 검토한 위에 자사의 방침을 결단할 필요가 있을 것이다.

 

이러한 경험을 기초로 개발된 서버 사이드 프레임워크가 ngServer이다.

 「진기함을 자랑하지 않는 표준적인 구성」이라고 한다.

아래 그림의 아키텍쳐를 소개.

디바이스(스마트 폰)으로부터 JSON이 보내지면 ngServer의 콘트롤러는 JSON을 돌려준다. 디바이스 측은 그것을 기초로 디바이스 상에서 렌더링을 실시. 종래의 휴대 전화(feature )의 소셜 게임과 같이 서버로부터 디바이스에 swf 파일이나 렌더링 된 HTML파일, 이미지 등이 송신될 일은 없으며 거래되는 것은 JSON만으로 하는 것으로 Node.js의 강점을 최대한으로 살리는 구조다.

 




 

출처 : http://codezine.jp/article/detail/6446

by 흥배 2012.03.21 09:00

BostInnovation Node.js의 아버지 Ryan Dahl의 인터뷰에서

 

어떤 문제를 해결하기 위해서 Node.js를 만들었나?

Dahl : 나는 작은 이벤트 베이스의 프로그램에 관련된 있을 하고 있었다. 이벤트 베이스 서버에 흥미를 가지고 있다. 왜냐하면 이해하기 쉽기 때문이다. 소켓 등의 읽기를 블록하는 무한 루프도 없다. 그래서 논 블러킹 I/O만을 갖춘 적은 레이턴시의 작은 서버를 만들자고 생각했었다.

 


JacaScript를 선택했는가?

Dahl : 사실 처음에는 달랐다. 처음에는 C, Lua, Haskell 등으로 해보았지만 실패했었다. 그때 V8을 알게 되었고, 시작하는 참에 JavaScript가 완벽한 언어라고 갑자기 번뜩였다.

 

by 흥배 2011.12.21 23:54

libuv Non-Blocking I/O를 추상화한 wrapper 라이브러리로 멀티 플랫폼, 멀티 프로그래밍 언어(Rubym Lua, PHP, C# )에서 사용하는 것을 목표로 하고 있습니다.

현재 libuv를 사용하는 대표적인 것으로는 Node.js가 있습니다.

Node.js는 원래 libev libeio를 사용하고 있었으나 Windows 플랫폼을 지원하게 되면서 이 두 라이브러리를 대신하여 libuv를 사용합니다.

 

Node.jslibuv 덕분에 현재 보다 더 다양한 플랫폼을 지원할 수 있고, Node.rb Node.cs 같은 것들이 나올 수도 있게 되었습니다.

 

libuv에 대한 더 자세한 것은 http://blog.nodejs.org/2011/09/23/libuv-status-report/ 에서 참고 하기 바랍니다.

libuv C#에서 사용하는 프로젝트는 https://github.com/kersny/libuv-csharp

웹서버에 사용하는 프로젝트는 https://gist.github.com/1195428

 

libuvhttps://github.com/joyent/libuv 에서 소스 코드를 받아 볼 수 있습니다.

 

libuv를 VC++로 빌드하기 위해서는 먼저 svn과 파이썬 2.7이 설치 되어 있어야 합니다.

svn은 커맨드 라인으로 실행해야 하기 때문에 커맨드 라인으로 svn 명령어를 실행하지 못한다면 silk-subversion을 설치해야 합니다.

 

Visual Studio 용 솔루션 파일 만들기

libuv 소스 코드의 압축을 푼 후 (제가 압축을 푼 곳 E:\Dev\CommonLib\joyent-libuv-9f6024a)

1. vcbuild.bat를 실행한다.

2. build\gyp\tools 디렉토리에 있는 petty_sln.py를 실행한다.

3. 압축을 푼 폴더에(E:\Dev\CommonLib\joyent-libuv-9f6024a) uv.sln 파일이 만들어져 있다

 

by 흥배 2011.10.17 09:00
| 1 2 |