PS: โปรดอัปเกรดโหนด 6.2.1 ก่อน คำสั่งการอัพเกรดโหนดการติดตั้ง NPM -gn; n Stable.node.js Extension เป็นไลบรารีลิงก์แบบไดนามิกที่เขียนใน C/C ++ และโหลดผ่านฟังก์ชัน Node.js ต้องการฟังก์ชั่น () มันก็เหมือนกับการใช้โมดูล Node.js ธรรมดา ส่วนใหญ่จะให้อินเทอร์เฟซระหว่างโหนดและไลบรารี C/C ++
ด้วยวิธีนี้หากมีการใช้วิธีการหรือฟังก์ชั่นผ่านการขยายโหนดมันจะค่อนข้างซับซ้อนเกี่ยวข้องกับความรู้ของโมดูลและอินเทอร์เฟซหลายอย่าง:
• V8: JavaScript.v8 ที่ใช้การใช้งานผ่านไลบรารี C ++ ให้กลไกการสร้างวัตถุฟังก์ชั่นการโทรกลับ ฯลฯ เอกสาร V8API ส่วนใหญ่อยู่ในไฟล์ส่วนหัว V8.h คลิกที่เอกสารออนไลน์ v8 ของฉัน
• libuv: ไลบรารีสำหรับลูปเหตุการณ์ที่ใช้เธรด Node.js และพฤติกรรมแบบอะซิงโครนัส นอกจากนี้ยังทำหน้าที่เป็นไลบรารีนามธรรมข้ามแพลตฟอร์มที่สามารถเข้าถึงระบบระบบปฏิบัติการที่สำคัญทั้งหมดได้เช่นการโต้ตอบกับระบบไฟล์ซ็อกเก็ตตัวจับเวลาและเหตุการณ์ระบบ Libuv ยังมีเธรดที่มีลักษณะคล้าย pthreads ที่เป็นนามธรรมซึ่งสามารถใช้สำหรับอะซิงโครนัสที่ซับซ้อนมากขึ้น Node.js 'C/C ++ ส่วนขยายจำเป็นต้องไปไกลกว่าลูปเหตุการณ์มาตรฐาน ผู้เขียนปลั๊กอินสนับสนุนให้คิดเกี่ยวกับวิธีการหลีกเลี่ยงการปิดกั้นลูปเหตุการณ์ I/O และงานที่ต้องใช้งานอย่างเข้มข้นผ่านการดำเนินงานระบบที่ไม่ปิดกั้น LIBUV เธรดคนงานและเธรดที่ผู้ใช้กำหนด
• Library ในตัว node.js: node.js เองใช้ APIs ส่วนขยาย C/C ++ จำนวนมาก คลาสที่สำคัญที่สุดสำหรับโหนดส่วนขยาย C/C ++: ObjectWrap
•ไลบรารีลิงก์แบบคงที่จำนวนมากของ node.js เช่น OpenSSL: ไลบรารีอื่น ๆ ของ Node.js อยู่ในไดเรกทอรี DEPS ภายใต้แผนผังไดเรกทอรีต้นฉบับ สำหรับรายละเอียดโปรดดูการพึ่งพาของ Node.js สำหรับข้อมูลเพิ่มเติม คลิกที่ตัวอย่างไลบรารีส่วนขยายอย่างเป็นทางการของฉันซึ่งอาจเป็นจุดเริ่มต้นสำหรับคุณในการเขียนไลบรารีส่วนขยาย C/C ++ สำหรับ Node.js. เฉพาะคลาส V8 และ OpenSSL เท่านั้นที่ใช้บ่อยในส่วนขยายโหนด C/C ++
Node C/C ++ Extension First Bomb - ตัวอย่างล่าสุด Hello World
ตัวอย่างนี้ใช้กับ Node.js หมายเลขเวอร์ชัน V5.0 หรือสูงกว่า
// hello.jsconst addon = ต้องการ ('./ build/release/addon'); console.log (addon.hello ()); // 'World' // hello.cc#รวม <node.h> #include <v8.h> demo namespace {ใช้ v8 :: functioncallbackinfo; การใช้ v8 :: isolate; การใช้ v8 :: local; การใช้ v8 :: object; การใช้ V8 :: string; args.getisolate (); args.getReturnValue (). set (string :: newfromutf8 (ไอโซเลต, "โลก"));} เป็นโมฆะ init (ท้องถิ่น <Ojrop> การส่งออก) {node_set_method (การส่งออก, "hello", method);} node_module [{"target_name": "addon", "แหล่งที่มา": ["hello.cc"]}]}คำสั่ง Node-gyp
การคัดลอกรหัสมีดังนี้:
Node-gyp กำหนดค่า build
ข้างต้นคือความรู้ที่เกี่ยวข้องของ Node.js Addons Translation (ส่วนขยาย C/C ++) แนะนำให้คุณรู้จักโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!