node ffi 예제

ffi Node.js 패키지를 사용하여 Rust 코드를 노출하는 모듈을 만들 수 있습니다. 다음 게시물에서는 가장 복잡하지만 가장 강력한 Node.js / C ++ 통합 전략 – 네이티브 Node.js 모듈 작성에 대해 서도 설명합니다. 나는 이전 게시물에서 네이티브 모듈을 광범위하게 다루었으며 주제를 다루는 전자 책도 작업하고 있습니다. 다음 게시물에서는 Nan 라이브러리를 활용하여 V8 엔진의 특정 버전에 연결되지 않은 기본 모듈을 빌드하는 방법을 보여 드리겠습니다. 우리의 코드는 매우 간단합니다 – 나는 외주 상자 키워드와 URL 과 libc 상자를 사용하고 있습니다. FFI를 통해 외부 세계에 이를 노출하려면 펍 외향성으로 우리의 기능을 표시하는 것이 중요합니다. 우리의 함수는 Node.js에서 오는 문자열 형식을 나타내는 c_char 포인터를 취합니다. 네이티브 노드 애드온 개발에 대한 자습서를 읽은 후, 나는 여전히 대답없는 질문을 많이했다. 이 기사 시리즈에서 나는 물건에 초점을 맞추고 싶어, 나는 내 머리를 감싸고 내가 처음 v8와 난에 직면 했을 때, 알아내는 힘든 시간을했다.

바라건대, 이것은 당신이 쉽게 시작하는 데 도움이 될 것입니다. 항상 그렇듯이 이 예제의 소스 코드는 내 github 리포지토리에서 찾을 수 있습니다. node-ffi를 사용하는 주요 부분 중 하나는 node.js Buffer 개체 위에 네이티브 데이터 형식을 빌드하기 위해 ref 모듈을 마스터하는 것입니다. 이러한 데이터 형식(int, 배열 등)을 사용하면 공유 라이브러리 내에 있는 기본 함수와 상호 작용할 수 있습니다. 나는 그 보내기 함수가 호출 Node.js 코드에서 전송되는 배열에 소수를 추가 할 수 있기를 원합니다 :이 게시물은 DLL / 공유 라이브러리 및 노드 ffi를 사용하여 시리즈에 도입 된 두 번째 옵션을 제시했습니다. 이 옵션은 이미 DLL이있는 경우 완벽합니다 -하지만 난 또한 기존의 독립 실행 형 프로그램을 가지고 공유 라이브러리에 내장 할 수 있도록 그들을 다시 구성하는 방법을 보여주는이 게시물에 약간의 시간을 보냈다. 우리는 노드 gyp를 사용하여 플랫폼 간 방식으로 공유 라이브러리를 구축했으며 V8의 세부 정보를 얻지 않고 C ++ 코드와 Node.js를 효과적으로 통합하는 노드 ffi를 사용하여 라이브러리를 호출하는 방법을 보여 주었습니다. 이 옵션은 C 및 C++ 라이브러리에서 작동하지만 네이티브 라이브러리(예: Rust)로 컴파일할 수 있는 모든 언어에서도 작동합니다. 자동화에 비해 가장 큰 장점은 Node.js와 C++간에 훨씬 더 세분화된 조정을 할 수 있다는 것입니다. 이 예제에서는 헤더 파일모음인 Nan(Node.js의 기본 추상화)을 사용하여 도우미와 매크로를 제공하여 노드 애드온을 더 쉽게 개발하고 다른 노드에서 호환성을 유지할 수 있도록 합니다. 버전. 우리의 package.json 다음과 같이 보인다: 우리는 너무 녹 FFI를 사용 하려고! 우리는 이미 2 년 전 이전 블로그 포스트에서 Node.js와 Rust FFI를 사용하여 다루었습니다.

그 이후로 Rust 생태계에는 많은 변화가 있습니다. 모든 헤더 와 소스 파일을 src 폴더에 넣고 포함 경로에 node_module에 설치된 Nan 헤더를 추가합니다.