WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js
ผสานโมดูล WebAssembly เข้ากับแอปพลิเคชัน Node.js เพื่อสร้างตรรกะฝั่งเซิร์ฟเวอร์และไมโครเซอร์วิสประสิทธิภาพสูง
WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js เป็นบทเรียน WebAssembly (WASM) for High Performance Apps ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน WebAssembly (WASM) for High Performance Apps และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส WebAssembly (WASM) for High Performance Apps มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
Server WASM with Node.js
Welcome! In this lesson, we'll explore how WebAssembly (WASM) isn't just for browsers. We'll learn to integrate high-performance WASM modules directly into Node.js applications.
This allows you to leverage WASM's speed for server-side logic, microservices, and computationally intensive tasks.
Benefits of WASM on Server
Why bring WASM to the server?
- Performance: Execute near-native code for demanding tasks.
- Portability: Run the same WASM module across different server environments.
- Security: WASM's sandboxed environment offers enhanced security for untrusted code.
- Language Agnostic: Write high-performance logic in C, C++, Rust, Go, and more, then run it in Node.js.
Node.js's WASM Support
Node.js has built-in support for WebAssembly, making it straightforward to load and execute WASM modules. It provides the same WebAssembly global object available in browsers.
This means you can use familiar JavaScript APIs to interact with your compiled WASM code.
Our First C Module
Let's start with a very simple C function. We'll compile this C code into a WebAssembly module.
This function will just add two integers, demonstrating basic interaction.
int add_numbers(int a, int b) {
return a + b;
}Compiling C to WASM
To turn our C code into a WASM module, we use a toolchain like Emscripten. The command would look something like this:
emcc my_module.c -o my_module.wasm -s EXPORTED_FUNCTIONS="['_add_numbers']"
This creates my_module.wasm, which contains our compiled add_numbers function, ready for Node.js!
Loading WASM File
First, we need to read the .wasm file from our file system. Node.js's fs module is perfect for this.
Assume my_module.wasm is in the same directory.
const fs = require('fs');
const path = require('path');
async function loadWasm() {
// In a real scenario, 'my_module.wasm' would be a compiled file.
// For this runnable example, we use a dummy path.
const wasmPath = path.resolve(__dirname, 'dummy.wasm');
try {
const bytes = await fs.promises.readFile(wasmPath);
console.log('WASM bytes loaded! (if file existed)');
} catch (error) {
console.log('Dummy WASM file not found, proceeding...');
}
}
loadWasm();Instantiating the Module
Once we have the WASM bytes, we use WebAssembly.instantiate() to compile and instantiate the module. This gives us an instance object with access to exported functions.
For a runnable example, we'll use a very small, self-contained WASM binary that adds two numbers.
const fs = require('fs');
async function loadAndInstantiateWasm() {
// A minimal WASM binary for 'add(a, b) => a + b'
const wasmCode = new Uint8Array([
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, // WASM magic and version
0x01, 0x07, 0x01, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, // Type section: func(i32, i32) -> i32
0x03, 0x02, 0x01, 0x00, // Function section: one function, type 0
0x07, 0x07, 0x01, 0x03, 0x61, 0x64, 0x64, 0x00, 0x00, // Export section: export 'add' as func 0
0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x01, 0x6a, 0x0b // Code section: get_local 0, get_local 1, i32.add
]);
const { instance } = await WebAssembly.instantiate(wasmCode);
console.log('WASM module instantiated!');
// The 'instance' now holds our exported functions.
}
loadAndInstantiateWasm();Calling Exported Functions
Now that our WASM module is instantiated, we can access its exported functions through instance.exports. Our WASM module exports an add function.
Let's call it and see the result!
const fs = require('fs');
async function callWasmFunction() {
// A minimal WASM binary for 'add(a, b) => a + b'
const wasmCode = new Uint8Array([
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, // WASM magic and version
0x01, 0x07, 0x01, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, // Type section: func(i32, i32) -> i32
0x03, 0x02, 0x01, 0x00, // Function section: one function, type 0
0x07, 0x07, 0x01, 0x03, 0x61, 0x64, 0x64, 0x00, 0x00, // Export section: export 'add' as func 0
0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x01, 0x6a, 0x0b // Code section: get_local 0, get_local 1, i32.add
]);
const { instance } = await WebAssembly.instantiate(wasmCode);
const result = instance.exports.add(10, 20); // Calling the 'add' function
console.log('Result from WASM:', result);
}
callWasmFunction();Passing Primitive Data
As shown, passing primitive data types like integers (i32) between Node.js (JavaScript) and WASM is straightforward. WASM modules often use i32 for integers and f32/f64 for floats.
JavaScript numbers are 64-bit floats, but they are implicitly converted when passed to WASM functions expecting integer types.
WASM in Node.js Check
You've learned how to load and interact with a WASM module in Node.js. Let's test your understanding.
Server-Side WASM Recap
Great job! You've learned how to integrate WebAssembly modules into Node.js applications.
- WASM brings high performance and portability to server-side logic.
- Node.js provides native APIs (
WebAssembly.instantiate) for loading and running WASM. - You can compile code from languages like C/C++ to WASM using tools like Emscripten.
- Interacting with WASM functions and passing primitive data is direct and efficient.
This opens up exciting possibilities for building performant and flexible server applications!
คำถามที่พบบ่อย
บทเรียน “WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส WebAssembly (WASM) for High Performance Apps ให้อัปเกรดเป็น CoddyKit PRO คอร์ส WebAssembly (WASM) for High Performance Apps มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js”
ผสานโมดูล WebAssembly เข้ากับแอปพลิเคชัน Node.js เพื่อสร้างตรรกะฝั่งเซิร์ฟเวอร์และไมโครเซอร์วิสประสิทธิภาพสูง คุณปฏิบัติ WebAssembly (WASM) for High Performance Apps ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน WebAssembly (WASM) for High Performance Apps หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน WebAssembly (WASM) for High Performance Apps บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน WebAssembly (WASM) for High Performance Apps นี้ได้ไหม
ได้ บทเรียน WebAssembly (WASM) for High Performance Apps ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- WASM ฝั่งเซิร์ฟเวอร์ด้วย Node.js
- ฟังก์ชันคลาวด์และ WASM แบบไร้เซิร์ฟเวอร์
- ระบบฝังตัวและการประมวลผลใกล้ผู้ใช้
- การสร้างระบบปลั๊กอินที่ขยายได้ด้วย WASM