คู่มือสำหรับผู้เริ่มต้นสู่ Node.js (JavaScript ฝั่งเซิร์ฟเวอร์)
Node.js - ในคำง่าย ๆ - คือ JavaScript ฝั่งเซิร์ฟเวอร์. วันนี้ได้รับข่าวลือมากมาย หากคุณเคยได้ยินหรือคุณสนใจที่จะเรียนรู้และได้รับมัน - โพสต์นี้เหมาะสำหรับคุณ.
ดังนั้นความต้องการในการใช้ JavaScript ในเซิร์ฟเวอร์คืออะไร? เพื่อทำให้แนวคิดของ Node.js ชัดเจนฉันต้องการเปรียบเทียบกับภาษาฝั่งเซิร์ฟเวอร์ทั่วไปเช่น PHP Node.js ใช้ โพรซีเดอร์การเรียกใช้เซิร์ฟเวอร์ตามเหตุการณ์ มากกว่าการทำงานแบบมัลติเธรดใน PHP.
เพื่ออธิบายเพิ่มเติมเราจะพูดถึงความคิดของ Node.js คืออะไร พร้อมกับบางส่วน คำแนะนำและคำแนะนำในการติดตั้งของผู้ให้บริการโฮสติ้ง. คุณจำเป็นต้องมีความรู้ระดับกลางเกี่ยวกับ JavaScript, jQuery และ Ajax แต่เราจะให้ตัวอย่างสำหรับคุณที่จะเข้าใจสิ่งทั้งหมดได้ง่ายขึ้นและสามารถทำงานได้ดังนั้นเรามาทำความรู้จักกับ Node.js เพิ่มเติม!
ลองพิจารณากรณี:
พิจารณาเว็บไซต์ที่คุณต้องการโหลดเนื้อหาแบบไดนามิกจากเว็บเซิร์ฟเวอร์อื่นที่ช้า ใน PHP คุณสามารถทำได้ 2 วิธี - การเข้ารหัสในไฟล์อย่างง่าย และ การเข้ารหัสเป็นสคริปต์อื่น, แล้วก็ รันมันด้วยวิธีการแบบมัลติเธรด.
ในวิธีแรกแม้ว่ารหัสนั้นจะง่าย การดำเนินการหยุดชั่วคราวชั่วขณะหนึ่ง ตรงจุดที่เว็บเซิร์ฟเวอร์ทำงานช้า วิธีที่สองคือ เพิ่มประสิทธิภาพมากขึ้นในกรณีของประสิทธิภาพ แต่มันยากที่จะเขียนโค้ดและมีโอเวอร์เฮดการจัดการหลายเธรด กรณีนี้คล้ายกับภาษาการเขียนโปรแกรมเว็บส่วนใหญ่นอกเหนือจาก JavaScript ฝั่งเซิร์ฟเวอร์คือ Node.js.
ความแตกต่างใน Node.js คืออะไร? เพื่อที่จะเข้าใจ Node.js คุณต้องจำไว้ การเขียนโปรแกรมตามเหตุการณ์ของ JavaScript ในเบราว์เซอร์. เราใช้เทคโนโลยีเดียวกันที่นี่ แทนที่จะใช้เธรดแยกต่างหาก ฟังก์ชั่นที่แนบมากับเหตุการณ์เสร็จสิ้น ของ “การเข้าถึงเว็บเซิร์ฟเวอร์ช้า” ดังกล่าวข้างต้นจึงทำให้คุณได้รับ ฟังก์ชั่นเต็มรูปแบบ ในตัวเลือกที่สองที่ได้รับการปรับปรุงดังกล่าวข้างต้นโดยไม่มีโอเวอร์เฮดแบบมัลติเธรดใด ๆ.
เริ่มต้นกับ Node.js
Node.js คือ JavaScript. เหตุใดเราไม่สามารถใช้ฟังก์ชันการทำงานตามเหตุการณ์ของ JavaScript ในไคลเอนต์กับเซิร์ฟเวอร์ได้ ความคิดนี้อาจนำไปสู่การพัฒนา Node.js.
ที่กล่าวว่าเป็นไฮไลท์หลักของ Node.js - มันเป็นฟังก์ชั่นไม่ตรงกันตามเหตุการณ์. มันใช้ ห่วงเหตุการณ์ แทนที่จะรอการดำเนินการ I / O (การเข้าถึงบริการเว็บภายนอกการเข้าถึงฮาร์ดแวร์).
Node.js ยังคงสามารถ ใช้ประโยชน์จากพลังการประมวลผลของมัน เมื่อเซิร์ฟเวอร์กำลังรอการดำเนินการอื่น ๆ สิ่งนี้ทำให้ Node.js สามารถปรับขนาดได้ เพื่อการเชื่อมต่อพร้อมกันหลายล้านรายการ.
JavaScript ทำงานบนเซิร์ฟเวอร์อย่างไร?
Node.js ทำงานบนสภาพแวดล้อม v8 - เป็น เครื่องเสมือน หรือ เอ็นจิ้น JavaScript ที่รันโค้ด JavaScript ดังนั้นสำหรับการโฮสต์คุณจะไม่สามารถใช้โฮสต์เว็บปกติได้ คุณจะต้องมีคนที่มี สภาพแวดล้อม v8.
นี่คือคำแนะนำจากผู้ให้บริการสำหรับการโฮสต์ Node.js:
- Cloud Foundry
- Cloudnode
- DotCloud
- Duostack
กำลังติดตั้ง Node.js
โหนดจะ ทำงานได้อย่างสมบูรณ์บนระบบปฏิบัติการ Linux, Macintosh และ Solaris. บน Windows คุณสามารถติดตั้งโดยใช้เลเยอร์การจำลอง Cygwin การสร้างใน Windows ไม่เป็นที่พอใจ แต่ก็ยังมีความเป็นไปได้ที่จะเรียกใช้บางสิ่ง.
ตัวเลือก 1: การสร้างโหนดจากแหล่งที่มา.
ใช้ ทำ
เพื่อสร้างและติดตั้ง node.js (ดำเนินการต่อไปนี้บนบรรทัดคำสั่ง). ต้องมี Git.
git clone - ความลึก 1 git: //github.com/joyent/node.git โหนด cd git checkout v0.4.11 export JOBS = 2 mkdir ~ / local ./configure --prefix = $ HOME / local / node ทำการติดตั้ง echo 'export PATH = $ HOME / local / node / bin: $ PATH' >> ~ / .profile echo 'export NODE_PATH = $ HOME / local / node: $ HOME / local / node / lib / node_modules' >> ~ / .profile source ~ / .profile
ตัวเลือกที่ 2: การติดตั้ง Node.js จากแพ็คเกจ
สำหรับผู้ใช้ Mac คุณสามารถติดตั้ง Node.js เป็นแพ็คเกจได้จาก https://sites.google.com/site/nodejsmacosx/ ซึ่งอธิบายได้ด้วยตนเอง.
การทดสอบการติดตั้งโหนด
ในการตรวจสอบการติดตั้งโหนดที่ประสบความสำเร็จของคุณเราสามารถทดลองใช้โปรแกรม "Hello World" แบบง่ายๆได้ สร้างไฟล์ชื่อ "test.js"และเขียนรหัสต่อไปนี้ลงไป.
var sys = ต้องการ ("sys"); sys.puts ("Hello World");
คำอธิบายรหัส:
มันโหลด SYS
ระดับเป็นตัวแปร SYS
. จากนั้นใช้ SYS
วัตถุที่จะทำงานคอนโซล sys.puts
เป็นคำสั่งที่คล้ายกับ ศาล
ใน C ++ ดังนั้นในการเรียกใช้สคริปต์ข้างต้นให้ไปที่พรอมต์คำสั่งและรันโดยใช้คำสั่งด้านล่าง:
โหนด test.js
หากการติดตั้งของคุณสำเร็จคุณจะได้รับข้อความ Hello World บนหน้าจอ.
สร้างเซิร์ฟเวอร์ HTTP
ตอนนี้ได้เวลาสร้าง "Hello World" ผ่านเว็บเซิร์ฟเวอร์โดยใช้ Node.js นี่คือสิ่งที่เรากำลังจะทำ - เรา สร้างเซิร์ฟเวอร์ที่ส่งออก “สวัสดีชาวโลก” ไปยัง localhost บนพอร์ต 8080 ไม่ว่า URL จะเป็นอะไร เหตุการณ์ คือ.
รหัส:
var sys = ต้องการ ("sys"), my_http = require ("http"); my_http.createServer (ฟังก์ชั่น (ร้องขอ, ตอบกลับ) sys.puts ("ฉันถูกเตะ"); response.writeHeader (200, "ประเภทเนื้อหา": "ข้อความ / ธรรมดา"); response.write ("Hello World "); response.end ();). ฟัง (8080); sys.puts ("เซิร์ฟเวอร์ทำงานบน 8080");
คำอธิบายรหัส:
ส่วนที่น่าสนใจที่สุดใน Node.js คือการเขียนโปรแกรมตามเหตุการณ์ ในการสร้างเซิร์ฟเวอร์ HTTP เราต้องการ ไลบรารี HTTP, ดังนั้นเราจึงไปข้างหน้าและเพิ่มโดยใช้ my_http
. เราสร้างเซิร์ฟเวอร์โดยฟังก์ชั่น:
my_http.createServer (ฟังก์ชั่น (ขอการตอบสนอง) ) ฟัง (8080).
ฟังก์ชั่นที่กำหนดเป็นอาร์กิวเมนต์แรกจะถูกดำเนินการ ทุกครั้งที่มีเหตุการณ์เกิดขึ้นในพอร์ต 8080, ดังนั้นฟังก์ชั่นของตัวเอง แนะนำให้โหนดรับฟังเหตุการณ์ในพอร์ต 8080. เพื่อตรวจจับสิ่งนี้ฉันได้เพิ่ม “ฉันถูกเตะ” ข้อความที่จะปรากฏบนหน้าจอคอนโซลทุกครั้งที่ได้รับการร้องขอ.
ขอร้อง
วัตถุมี ข้อมูลทั้งหมดเกี่ยวกับการร้องขอที่ทำกับเซิร์ฟเวอร์. ตัวอย่างเช่นมันมีสตริง URL คำตอบ
วัตถุเป็นวัตถุที่ จัดการการตอบสนองจากเซิร์ฟเวอร์. ก่อนอื่นเราตั้งส่วนหัวของการตอบสนองเป็น ข้อความ / ธรรมดา
เนื้อหาจากนั้นส่งออก “สวัสดีชาวโลก“, จากนั้นจบสตรีมเอาต์พุต. 200 คือการตอบสนองสถานะ.
ข้างบนเป็นตัวอย่างที่ง่ายมาก แต่เราเห็นได้ว่า URL ใดก็ตามที่เราให้ในเบราว์เซอร์สำหรับเซิร์ฟเวอร์เดียวกันเราได้ผลลัพธ์เหมือนกัน “สวัสดีชาวโลก”.
การสร้างเซิร์ฟเวอร์ไฟล์แบบคงที่แบบง่าย
มาสร้างเซิร์ฟเวอร์ไฟล์แบบคงที่ง่ายๆในบทช่วยสอนต่อไป.
รหัส:
var sys = ต้องการ ("sys"), my_http = ต้องการ ("http"), เส้นทาง = ต้องการ ("เส้นทาง"), url = ต้องการ ("url"), filesys = ต้องการ ("fs"); my_http.createServer (ฟังก์ชั่น (ร้องขอการตอบสนอง) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, ฟังก์ชั่น (มีอยู่) ) ถ้า (! มีอยู่) response.writeHeader (404, "ประเภทเนื้อหา": "ข้อความ / ธรรมดา"); response.write ("404 ไม่พบ \ n"); response.end (); อื่น filesys.readFile (full_path, "binary", ฟังก์ชั่น (err, ไฟล์) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + "\ n"); response.end (); else response.writeHeader (200); response.write (ไฟล์ "ไบนารี่"); response.end ();););) ฟัง (8080); sys.puts ("เซิร์ฟเวอร์ทำงานบน 8080");
คำอธิบายรหัส:
รหัสข้างต้นนั้นค่อนข้างง่ายเราจะพูดถึงมันเป็นบล็อค.
var sys = ต้องการ ("sys"), my_http = ต้องการ ("http"), เส้นทาง = ต้องการ ("เส้นทาง"), url = ต้องการ ("url"), filesys = ต้องการ ("fs");
ไลบรารีเหล่านี้จำเป็นสำหรับโปรแกรม การใช้งานจะมีความชัดเจนในรหัสต่อไปนี้.
var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path);
ขอร้อง
วัตถุมีรายละเอียดคำขอตามที่เราได้กล่าวถึงก่อนหน้านี้ เราใช้ วิเคราะห์คำ
ฟังก์ชั่นของคลาส URL ที่เราได้รวมไว้เพื่อรับ ชื่อพา ธ
ของ URL คำขอ หลังจากรับชื่อพา ธ เราจะต่อเชื่อมกับพา ธ ของไดเรกทอรีทำงานปัจจุบันเพื่อรับพา ธ เต็มของไฟล์.
สำหรับการเข้าร่วม URL เรามีฟังก์ชั่นที่เรียกว่า ร่วม
ในไลบรารีพา ธ.
path.exists (full_path ฟังก์ชั่น (มี)
หลังจากได้รับเส้นทางแบบเต็มเราจะตรวจสอบว่าเส้นทางนั้นมีอยู่โดยฟังก์ชันหรือไม่ ที่มีอยู่
. หลังจากตรวจสอบเสร็จแล้วฟังก์ชั่นการโทรกลับถูกเรียกและผ่านเป็นอาร์กิวเมนต์ที่สอง.
ถ้า (! มีอยู่) response.writeHeader (404, "เนื้อหาประเภท": "ข้อความ / ธรรมดา"); response.write ("404 ไม่พบ \ n"); Response.End (); else filesys.readFile (full_path, "binary", ฟังก์ชั่น (err, ไฟล์) if (err) response.writeHeader (500, "ประเภทเนื้อหา": "ข้อความ / ธรรมดา"); response.write ( err + "\ n"); response.end (); else response.writeHeader (200); response.write (ไฟล์, "ไบนารี่"); response.end (););
ตอนนี้ในฟังก์ชั่นการโทรกลับหากไฟล์ไม่มีอยู่เราก็ส่ง "ไม่พบหน้า 404"ผิดพลาด.
หากพบหน้าแล้วเราอ่านไฟล์โดย readfile
ฟังก์ชั่นในระบบไฟล์ นอกจากนี้เรายังสามารถดูฟังก์ชั่นการโทรกลับสำหรับ readfile
ฟังก์ชั่นที่กำหนดไว้ที่นั่นเอง หากไม่มีข้อผิดพลาดในการอ่านไฟล์ก็จะปรากฏขึ้น หากมีข้อผิดพลาดสถานะ 500 จะถูกส่งคืนพร้อมข้อความแสดงข้อผิดพลาด.
ฉันยังแนะนำการตัดโค้ดของบทช่วยสอนก่อนหน้าในฟังก์ชันเพื่อให้คุณสามารถใช้ในบทช่วยสอนถัดไปหรือเพื่อใช้ในอนาคต.
var sys = ต้องการ ("sys"), my_http = ต้องการ ("http"), เส้นทาง = ต้องการ ("เส้นทาง"), url = ต้องการ ("url"), filesys = ต้องการ ("fs"); my_http.createServer (ฟังก์ชั่น (ร้องขอการตอบสนอง) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, ฟังก์ชั่น (มีอยู่) ) ถ้า (! มีอยู่) response.writeHeader (404, "ประเภทเนื้อหา": "ข้อความ / ธรรมดา"); response.write ("404 ไม่พบ \ n"); response.end (); อื่น filesys.readFile (full_path, "binary", ฟังก์ชั่น (err, ไฟล์) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + "\ n"); response.end (); อื่น response.writeHeader (200); response.write (ไฟล์ "ไบนารี"); response.end (););; my_http createServer (ฟังก์ชั่น (ร้องขอการตอบสนอง) var my_path = url.parse (request.url) .pathname; load_file (my_path การตอบสนอง);) ฟัง (8080); sys.puts ("เซิร์ฟเวอร์ที่ทำงานบน 8080");
คอยติดตาม !
นั่นคือทั้งหมดที่ หวังว่านี่จะช่วยให้คุณมีความคิดที่ดีเกี่ยวกับ Node.js ในบทความถัดไปฉันจะแสดงวิธีการ โหลดและแสดงจำนวนการถูกใจของ Facebook โดยใช้ Node.js. คอยติดตาม!
หมายเหตุจากบรรณาธิการ: โพสต์นี้เขียนโดย Geo Paul สำหรับ Hongkiat.com Geo เป็นผู้พัฒนาเว็บ / iPhone อิสระที่สนุกกับการทำงานกับ PHP, Codeigniter, WordPress, jQuery และ Ajax เขามีประสบการณ์ 4 ปีใน PHP และประสบการณ์ 2 ปีในการพัฒนาแอพพลิเคชั่นบนไอโฟน.