โฮมเพจ » การเข้ารหัส » คู่มือสำหรับผู้เริ่มต้นสู่ Node.js (JavaScript ฝั่งเซิร์ฟเวอร์)

    คู่มือสำหรับผู้เริ่มต้นสู่ 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:

    1. Cloud Foundry
    2. Cloudnode
    3. DotCloud
    4. 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 ปีในการพัฒนาแอพพลิเคชั่นบนไอโฟน.