본문 바로가기

Programing/Node.js

(21)
[node.js] C/C++ Addons 준비 node.js Windows 7 x86 (32bit)에서 수행 1. node.js설치 https://nodejs.org/ 에 방문하면 자신의 플랫폼에 맞는 다운로드 링크를 보여준다. 2. node-gyp 설치 node.js를 설치하면 npm을 사용할 수 있는데 이 유틸리티를 이용한다. 참고로, node-gyp는 node.js를 위한 네이티브 addon 모듈들을 컴파일하기 위한 node.js로 작성된 크로스-플랫폼 명령 라인 도구(node-gyp is a cross-platform command-line tool written in Node.js for compiling native addon modules for Node.js)이다. node-gyp 설치를 위해서는 명령 프롬프트에서 아래 명령을 수행한다.C:\User..
libuv - uv_pipe_open 에러 : EINVAL 아래 코드는 파일을 열어서, 파이프로 만드는 간단한 예제이다.https://github.com/nikhilm/uvbook/blob/master/code/uvtee/main.c 를 참고했다. (거의 같다.) 그런데 아래 콘솔처럼 EINVAL이 떨어진다.디버그를 해보니 아래 처럼 호출 스택이 이어지고 uv_set_pipe_handle에 이른다. 이 함수에서 SetNamedPipeHandleState라는 윈도우 API를 호출하는데 에러가 발생하는 것이다.
libuv 계층도 libuv를 이용해서 개발을 할 때 문제는 레퍼런스가 별로 없다는 것이다.MSDN같이 잘 정리되어 있는 API 문서가 있으면 좋겠지만, 그나마 괜찮은 문서는 An Introduction to libuv인데 버전이 좀 되다보니 안맞는게 많다. 이 문서조차도 공식 API 문서는 uv.h 파일이라는 말을 하고 있다. tcp 서버를 만들고 있는데 accept가 되면 uv_tcp_t로 init을 하고 uv_stream_t 로 캐스팅을 한다. 소스를 보았더니 아래와 같은 계층 구조를 가지고 있었다.
libuv가 많이 바뀌었다. 객체지향에서 인터페이스 부분(public 필드나 메서드)은 바뀌면 사용하는 부분도 수정을 해주어야 한다.C의 경우에는 함수의 프로토타입이 그런 영역이 될 것이다. libuv에 대한 메뉴얼이 별도로 없어서 An Introduction to libuv와 libuv 소스코드를 참고해서 짜다보니 현재 버전과 많이 다르다는 것을 느끼고 있다. 이 메뉴얼은 0.10.2 기준으로 되어 있고 나는 0.11.24 버전이다 (uv-version.h에 적혀있다) uv_last_errorWin32의 GetLastError()와 유사하다.이 함수는 함수 모양이 바뀐 것이 아니라 아예 없어졌다.예제를 보면 uv_err_name(uv_last_error(loop)) 식으로 사용을 한다. 참고로 loop는 uv_loop_t 포인터 ..
An Introduction to libuv 주소: http://nikhilm.github.io/uvbook/ 우선 예제를 돌리기 전에 git으로 소스코드를 빌드해서 시스템에 설치를 한다.자세한 내용은 전에 포스팅한 libuv를 참고아래 명령처럼 libuv.a 파일이 /usr/local/lib/에 있어야 한다.$ ls /usr/local/lib/libuv.a/usr/local/lib/libuv.a 첫 번째 예제 - http://nikhilm.github.io/uvbook/basics.html#hello-world소스코드#include #include int main() { uv_loop_t *loop = uv_loop_new(); printf("Now quitting.\n"); uv_run(loop, UV_RUN_DEFAULT); return 0;..
libuv libuv는 Node.js에서 사용하고 있는 고성능 이벤트 I/O를 위한 라이브러리이다.최초의 Node.js는 Marc Lehmann의 libev와 V8를 사용해서 만들어졌다. 하지만 libev는 Unix에서만 동작하고 Windows에서는 동작을 하지 않는다는 단점이 있었다. 이전에 쓴 Node.js 윈도우 지원의 역사에도 나와있지만 리안 달역시 윈도우가 중요한 플랫폼으로 생각하고 윈도우의 IOCP를 이용해 이벤트 I/O를 편입을 하려고 하였다. 그래서 도입한 것이 libuv이다. 처음에는 libev와 libuv가 동시에 사용이 되다가 Node.js v0.9에서 libev가 제거되었다. Node.js가 V8을 이용한 자바스크립트 인터프리트 엔진이 들어가다보니 런타임 메모리가 클 수 밖에 없었다.그래서 자..
Node.js winston 표준 시간이 안맞는 경우 해결 방법 winstone의 날짜는 winston.transports설정시 timestamp 프로퍼티를 이용하여 설정할 수 있다.var winston = require('winston');winston.add(winston.transports.File, { filename: '2014-03-20.log', timestamp: true, json: false }); 그런데 이렇게 했을 때 시간의 아래와 같은 형태로 찍힌다.'2014-03-20T08:26:15.861Z'그런데 이 시간은 UTC이기 때문에 지역시간과 다를 수 있다. KST를 사용하는 한국에서는 -9 한 값이 나온다. winston의 기본 시간 표시는 whitelife님의 블로그를 보면 알 수 있듯이 node_modules/winston/lib/winst..
솔루션 파일 error MSB5014: 파일 형식 버전을 인식할 수 없습니다. 에러화면 에러내용build/binding.sln(1): 솔루션 파일 error MSB5014: 파일 형식 버전을 인식할 수 없습니다. MSBuild는 7.0 버전에서 9.0 버전까지의 솔루션 파일만 읽을 수 있습니다. http://joyent.github.io/node-snmpjshttps://github.com/joyent/node-snmpjs의 모듈을 받아서 npm install로 설치를 하려는데 위와 같은 에러가 났다. 원인을 찾아찾아 가니> node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild 명령을 실행할 때 발생하는 것이었다.C:\Prog..