ความนิยมที่เพิ่มขึ้นของ JavaScript ทำให้เกิดการเปลี่ยนแปลงหลายอย่างรวมถึงพื้นผิวของการพัฒนาเว็บเนื่องจากปัจจุบันมีความแตกต่างกันอย่างสิ้นเชิง สิ่งที่เราสามารถทำได้บนเว็บในปัจจุบันด้วย JavaScript ที่ทำงานบนเซิร์ฟเวอร์รวมถึงในเบราว์เซอร์นั้นยากที่จะจินตนาการได้เมื่อหลายปีก่อนหรือถูกห่อหุ้มไว้ในสภาพแวดล้อมแซนด์บ็อกซ์เช่น Flash และ Java
ก่อนสอบถามเข้า โหนด js คุณอาจต้องการอ่านเกี่ยวกับประโยชน์ของการใช้ JavaScript ในสแต็กซึ่งรวมภาษาและรูปแบบข้อมูล (JSON) เข้าด้วยกันเพื่อให้สามารถนำทรัพยากรของนักพัฒนามาใช้ซ้ำได้อย่างเหมาะสม เนื่องจากนี่เป็นประโยชน์ของ JavaScript มากกว่า Node.js โดยเฉพาะเราจะไม่พูดถึงมันมากที่นี่ อย่างไรก็ตามเป็นข้อได้เปรียบที่สำคัญในการรวม Node ไว้ในสแต็กของคุณ
ตามที่ Wikipedia แนะนำ:“ Node.js เป็นสภาพแวดล้อมรันไทม์ข้ามแพลตฟอร์มแบบโอเพ่นซอร์สสำหรับเลเยอร์เซิร์ฟเวอร์ (แต่ไม่ จำกัด เพียง) ตามภาษาการเขียนโปรแกรม ECMAScript แบบอะซิงโครนัสโดยมี I / O ของข้อมูลในสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ตาม บนเครื่องยนต์ V8 ของ Google ' นอกเหนือจากนั้นเป็นที่น่าสังเกตว่า Ryan Dahl ผู้สร้าง Node.js ได้รับการตั้งค่าให้สร้างเว็บไซต์ฝังแบบเรียลไทม์ 'ได้รับแรงบันดาลใจจากแอปเช่น Gmail' ใน Node.js เขาให้เครื่องมือแก่นักพัฒนาในการทำงานกับกระบวนทัศน์ I / O ที่ขับเคลื่อนด้วยเหตุการณ์โดยไม่ปิดกั้น
หลังจากสองทศวรรษของโปรโตคอลไร้สัญชาติตามกระบวนทัศน์โปรโตคอลตอบสนองคำขอในที่สุดเราก็มีแอปพลิเคชันเว็บแบบเรียลไทม์การเชื่อมต่อแบบสองทิศทาง
ในประโยค: Node.js ส่องในเว็บแอปพลิเคชันแบบเรียลไทม์ที่ใช้เทคโนโลยีพุชผ่าน Websockets ปฏิวัติเรื่องนี้เป็นอย่างไร? หลังจากผ่านไปกว่า 20 ปีของเว็บไซต์ไร้สัญชาติตามกระบวนทัศน์การตอบสนองการร้องขอแบบไร้รัฐในที่สุดเราก็มีเว็บแอปพลิเคชันแบบเรียลไทม์การเชื่อมต่อแบบสองทิศทางซึ่งทั้งไคลเอนต์และเซิร์ฟเวอร์สามารถเริ่มการสื่อสารทำให้พวกเขาแลกเปลี่ยนข้อมูลได้อย่างอิสระ สิ่งนี้ตรงกันข้ามกับกระบวนทัศน์การตอบสนองทางเว็บทั่วไปที่ลูกค้ามักจะเริ่มการสื่อสาร นอกจากนี้ทุกอย่างยังขึ้นอยู่กับ Open Web Stack (HTML, CSS และ JS) ที่ทำงานบนพอร์ตมาตรฐาน 80
เราสามารถโต้แย้งได้ว่าเรามีรูปแบบนี้มาหลายปีแล้วในรูปแบบของ Flash และ Java Applets แต่ในความเป็นจริงมันเป็นเพียงสภาพแวดล้อม Sandbox โดยใช้เว็บเป็นโปรโตคอลการขนส่งที่จะส่งไปยังไคลเอนต์ นอกจากนี้ยังทำงานแยกกันและมักจะทำงานผ่านพอร์ตที่ไม่ได้มาตรฐานซึ่งอาจมีข้อกำหนดเพิ่มเติมสำหรับการใช้งาน
ด้วยข้อดีทั้งหมด Node.js จึงมีบทบาทสำคัญในกลุ่มเทคโนโลยีของ บริษัท ที่มีชื่อเสียงระดับสูงจำนวนมากที่อาศัยข้อดีที่เป็นเอกลักษณ์
ในบทความนี้ฉันจะพูดถึงไม่เพียง แต่จะได้รับข้อดีเหล่านี้เท่านั้น แต่ยังรวมถึงสาเหตุที่คุณอาจต้องการใช้ Node.js และทำไมไม่ใช้โมเดลเว็บแอปพลิเคชันแบบคลาสสิกเป็นตัวอย่าง
แนวคิดหลักของ Node.js: ใช้ I / O ที่ขับเคลื่อนด้วยเหตุการณ์ไม่ปิดกั้นมีน้ำหนักเบาและมีประสิทธิภาพบนพื้นผิวของการใช้ข้อมูลแบบเรียลไทม์ที่หนักหน่วงของแอปพลิเคชันที่ทำงานบนอุปกรณ์แบบกระจาย
น่าทึ่งใช่มั้ย?
ความหมายจริงๆคือ Node.js ไม่ใช่แพลตฟอร์มใหม่ที่จะครองโลกแห่งการพัฒนาเว็บ แต่เป็นแพลตฟอร์มที่เติมเต็มความต้องการเฉพาะ
และความเข้าใจนี้จำเป็นอย่างยิ่ง แน่นอนคุณไม่ต้องการใช้ Node.js สำหรับการดำเนินการที่เข้มข้นของ CPU ในความเป็นจริงการใช้เพื่อการคำนวณอย่างหนักจะลบล้างข้อดีเกือบทั้งหมด ในกรณีที่ Node ยอดเยี่ยมจริงๆคือในการสร้างแอปพลิเคชันเครือข่ายที่รวดเร็วและปรับขนาดได้เนื่องจากสามารถจัดการการเชื่อมต่อพร้อมกันจำนวนมากด้วยประสิทธิภาพสูงซึ่งเท่ากับความสามารถในการปรับขนาดได้สูง
วิธีการทำงานภายในค่อนข้างน่าสนใจ เมื่อเทียบกับเทคนิคการบริการเว็บแบบเดิมที่การเชื่อมต่อ (คำขอ) แต่ละรายการจะสร้างเธรดใหม่โดยดึง RAM ของระบบกลับมาและในที่สุดก็เติม RAM ที่มีอยู่ Node.js ทำงานในเธรดเดียวโดยไม่ใช้ I / O การบล็อกการโทร ทำให้สามารถรองรับการเชื่อมต่อพร้อมกันได้หลายหมื่นครั้ง (ถือไว้ในเคสแบบวนซ้ำ)
การคำนวณอย่างรวดเร็ว: สมมติว่าแต่ละเธรดมีศักยภาพพร้อมด้วยหน่วยความจำ 2 MB ซึ่งจะถูกดำเนินการภายในระบบที่มี RAM 8 GB ทำให้เราสามารถเชื่อมต่อพร้อมกันได้สูงสุดตามทฤษฎี 4,000 ครั้งนอกเหนือจากค่าใช้จ่ายในการสลับบริบทระหว่าง เธรด นั่นคือสถานการณ์ที่มักจะจัดการกับเทคนิคการบริการเว็บแบบเดิม ๆ เพื่อหลีกเลี่ยงสิ่งนั้น Node.js ถึงระดับความสามารถในการขยายขนาดของการเชื่อมต่อพร้อมกันมากกว่า 1M ( เป็นหลักฐานยืนยันแนวคิด ).
แน่นอนว่ามีความสามารถในการแชร์เธรดเดียวระหว่างคำขอของไคลเอ็นต์ทั้งหมดทำให้การเขียนแอปพลิเคชัน Node.js อาจล้มเหลว ประการแรกการคำนวณที่หนักหน่วงอาจหยุดและทำให้เกิดปัญหากับไคลเอนต์ทั้งหมด (เพิ่มเติมในภายหลัง) เช่นคำขอที่เข้ามาซึ่งจะถูกบล็อกจนกว่าการคำนวณดังกล่าวจะเสร็จสมบูรณ์ ประการที่สองนักพัฒนาต้องระมัดระวังอย่างมากที่จะไม่อนุญาตให้มีข้อยกเว้นที่เป็นฟองในคอร์ (อันบนสุด) ซึ่งจะทำให้อินสแตนซ์ Node.js หยุดทำงาน ( บล็อกโปรแกรมอย่างมีประสิทธิภาพ ).
เทคนิคที่ใช้เพื่อหลีกเลี่ยงข้อยกเว้นจะส่งผ่านข้อผิดพลาดไปยังการโทรเป็นการเรียกพารามิเตอร์ (แทนที่จะดึงข้อผิดพลาดเช่นเดียวกับในสภาพแวดล้อมอื่น ๆ ) แม้ว่าจะมีข้อยกเว้นเกิดขึ้น แต่ก็มีเครื่องมือหลายอย่างที่พร้อมใช้งานในการตรวจสอบกระบวนการ Node และดำเนินการกู้คืนที่จำเป็นในกรณีฉุกเฉิน (แม้ว่าคุณจะไม่สามารถกู้คืนเซสชันของผู้ใช้ได้) เหตุฉุกเฉินที่พบบ่อยที่สุดคือโมดูล Forever หรือวิธีการอื่นที่มีเครื่องมือระบบภายนอกและการตรวจสอบที่พุ่งพรวด
เมื่อเราพูดถึง Node.js สิ่งหนึ่งที่ไม่ควรมองข้ามอย่างแน่นอนคือการรวมเข้ากับการสนับสนุนการจัดการแพ็คเกจโดยใช้เครื่องมือ NPM ที่มาพร้อมกับการติดตั้ง Node.js ทุกครั้ง แนวคิดของโมดูล NPM นั้นคล้ายกับ Ruby Gems มาก: ชุดของส่วนประกอบที่ใช้ซ้ำได้ซึ่งเปิดเผยต่อสาธารณะผ่านการติดตั้งที่ง่ายดายผ่านพื้นที่เก็บข้อมูลออนไลน์พร้อมเวอร์ชันและการจัดการการพึ่งพา
คุณสามารถดูรายการแพ็คเกจโมดูลทั้งหมดได้ที่เว็บไซต์ NPM https://npmjs.org/ หรือเข้าถึงได้โดยใช้เครื่องมือ NPM CLI ที่ติดตั้งโดยอัตโนมัติด้วย Node.js โมดูลนี้เป็นระบบนิเวศที่เปิดสำหรับทุกคนและทุกคนสามารถเผยแพร่โมดูลของตนเองซึ่งจะรวมอยู่ในที่เก็บ NPM คำแนะนำสั้น ๆ เกี่ยวกับ NPM (เก่าไปหน่อย แต่ยังใช้ได้) มีอยู่ที่ http://howtonode.org/introduction-to-npm .
บางส่วนที่ได้รับความนิยมมากที่สุดในปัจจุบันคือโมดูล NPM:
อุตสาหกรรมเครื่องสำอางมีมูลค่าเท่าไหร่
ด่วน - Express.js ซึ่งได้รับแรงบันดาลใจจากกรอบการพัฒนาเว็บสำหรับ Node.js และมาตรฐานโดยพฤตินัยสำหรับแอปพลิเคชัน Node.js ส่วนใหญ่ในปัจจุบัน
เชื่อมต่อ - Connect เป็นเฟรมเวิร์กเซิร์ฟเวอร์ HTTP ที่ขยายได้สำหรับ Node.js ซึ่งมีคอลเล็กชันปลั๊กอินประสิทธิภาพสูงที่เรียกว่ามิดเดิลแวร์ ทำหน้าที่เป็นรากฐานในการแสดงออก
socket.io ย ถุงเท้า - ส่วนประกอบเซิร์ฟเวอร์ของสององค์ประกอบ websockets ที่พบบ่อยที่สุดในปัจจุบัน
หยก - หนึ่งในเอนจิ้นเทมเพลตยอดนิยมซึ่งได้รับแรงบันดาลใจจาก HAML ซึ่งเป็นข้อบกพร่องใน Express.js
Mongo ย mongojs - mongoDB wrappers เพื่อจัดเตรียม API สำหรับฐานข้อมูลวัตถุ MongoDB ใน Node.js
ทำซ้ำ - ไลบรารีไคลเอนต์ Redis
กาแฟสคริปต์ - คอมไพเลอร์ CoffeeScript ที่อนุญาตให้นักพัฒนาเขียนโปรแกรม Node.js ด้วยกาแฟ
ขีดล่าง ( ลอดจ์ , ขี้เกียจ ) - ไลบรารียูทิลิตี้ที่ได้รับความนิยมมากที่สุดของ JavaScript ซึ่งบรรจุสำหรับใช้กับ Node.js รวมทั้งสองส่วนซึ่งสัญญาว่าจะปรับปรุงประสิทธิภาพโดยใช้แนวทางการใช้งานที่แตกต่างกันเล็กน้อย
ตลอดไป - น่าจะเป็นยูทิลิตี้ที่พบบ่อยที่สุดเพื่อให้แน่ใจว่าสคริปต์โหนดที่กำหนดจะทำงานอย่างต่อเนื่อง ทำให้กระบวนการ Node.js ของคุณใช้งานได้จริงและเมื่อเกิดข้อขัดข้องที่ไม่คาดคิด
รายการไม่มีที่สิ้นสุด มีแพ็คเกจที่มีประโยชน์มากมายสำหรับทุกคน (ไม่มีความผิดใด ๆ กับแพ็คเกจที่ฉันข้ามไปที่นี่)
เป็นแอปพลิเคชันแบบเรียลไทม์และผู้ใช้หลายคนที่พบมากที่สุด จาก IRC (ย้อนกลับไปในวันนั้น) ผ่านโปรโตคอลที่เป็นกรรมสิทธิ์และเปิดจำนวนมากที่หมุนบนพอร์ตที่ไม่ได้มาตรฐานพร้อมความสามารถในการใช้เครื่องมือทุกอย่างใน Node.js ด้วย websockets ที่ทำงานบนพอร์ตมาตรฐาน 80
แอปแชทเหมาะอย่างยิ่งสำหรับ Node.js - มีน้ำหนักเบาปริมาณการใช้ข้อมูลสูง (แต่ปริมาณงาน / คำนวณต่ำ) และเป็นแอปที่ทำงานบนอุปกรณ์แบบกระจาย นอกจากนี้ยังเป็นกรณีการใช้งานที่ยอดเยี่ยมสำหรับการเรียนรู้เนื่องจากง่ายเกินไป แต่ในขณะเดียวกันก็ครอบคลุมเครื่องมือส่วนใหญ่ที่คุณสามารถใช้ในแอปพลิเคชัน Node.js ทั่วไป
เราจะพยายามอธิบายวิธีการทำงาน
ในตัวอย่างที่ง่ายที่สุดเรามีห้องสนทนาเดียวบนเว็บไซต์ของเราซึ่งผู้คนสามารถเข้ามาแลกเปลี่ยนข้อความกับคน ๆ เดียวหรือหลายคนก็ได้ ตัวอย่างเช่นสมมติว่าเรามีสามคนในไซต์ทั้งหมดที่เชื่อมต่อกับกระดานข้อความของเรา
ในฝั่งเซิร์ฟเวอร์เรามี Express.js แบบธรรมดาที่ใช้สองสิ่ง: 1) รับตัวจัดการคำขอ '/' ที่ให้บริการหน้าเว็บที่มีกระดานข้อความและปุ่ม 'ส่ง' เพื่อเริ่มต้นข้อความใหม่จากอินพุตและ 2 ) เซิร์ฟเวอร์ websockets ที่รับฟังข้อความที่ออกโดยไคลเอนต์ websocket
วิธีที่ดีที่สุดในการศึกษาเพื่อรับใบรับรอง aws
ในไคลเอนต์เรามีหน้า HTML ที่มีตัวจัดการสองสามตัวหนึ่งสำหรับเหตุการณ์คลิกปุ่ม 'ส่ง' ซึ่งจะรับข้อความที่ป้อนและส่งลงใน websocket และอีกหน้าหนึ่งซึ่งรับฟังข้อความขาเข้าจากไคลเอนต์ใหม่ websockets (นั่นคือข้อความที่ส่งโดยผู้ใช้รายอื่นซึ่งตอนนี้เซิร์ฟเวอร์ต้องการให้ไคลเอ็นต์แสดง)
เมื่อลูกค้ารายใดรายหนึ่งส่งข้อความสิ่งที่เกิดขึ้นมีดังต่อไปนี้:
เบราว์เซอร์จับปุ่ม 'ส่ง' โดยคลิกผ่านตัวจัดการ JavaScript ที่รับค่าของช่องป้อนข้อมูล (เช่นข้อความ) และออกข้อความ websocket โดยใช้ไคลเอนต์ websocket ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา (เริ่มต้นในการเริ่มต้นหน้าเว็บ)
ส่วนประกอบเซิร์ฟเวอร์ของการเชื่อมต่อ websocket รับข้อความและส่งต่อไปยังไคลเอนต์ที่เชื่อมต่ออื่น ๆ ทั้งหมดโดยใช้วิธีการออกอากาศ
ไคลเอนต์ทั้งหมดได้รับข้อความเป็นข้อความพุชผ่านคอมโพเนนต์ไคลเอ็นต์ websockets ที่ทำงานภายในเว็บเพจ จากนั้นพวกเขารวบรวมเนื้อหาของข้อความและอัปเดตหน้าเว็บแทนการต่อท้ายข้อความใหม่ลงบนกระดาน
นี่คือตัวอย่างที่ง่ายที่สุด สำหรับวิธีแก้ปัญหาที่มีประสิทธิภาพมากขึ้นคุณสามารถใช้แคชแบบธรรมดาตามร้านค้า Redis หรือแม้แต่ในโซลูชันขั้นสูงกว่านั้นคิวข้อความเพื่อจัดการการกำหนดเส้นทางของข้อความไปยังไคลเอนต์และกลไกการจัดส่งที่มีประสิทธิภาพมากขึ้นซึ่งสามารถครอบคลุมการสูญเสียการเชื่อมต่อชั่วคราวหรือจัดเก็บข้อความสำหรับไคลเอ็นต์ที่ลงทะเบียนในขณะที่ตัดการเชื่อมต่อ แต่ไม่ว่าคุณจะเพิ่มการปรับปรุงใด Node.js จะยังคงทำงานภายใต้หลักการพื้นฐานเดียวกันนั่นคือการตอบสนองต่อเหตุการณ์การจัดการการเชื่อมต่อพร้อมกันจำนวนมากและการรักษาความลื่นไหลของประสบการณ์ผู้ใช้
แม้ว่า Node.js จะโดดเด่นท่ามกลางแอปพลิเคชันแบบเรียลไทม์ แต่ก็เหมาะสำหรับการเปิดเผยข้อมูลจากวัตถุ DBs (เช่น MongoDB) การจัดเก็บข้อมูล JSON ช่วยให้ Node.js ทำงานได้โดยที่ความต้านทานไม่ตรงกันและการแปลงข้อมูล
ตัวอย่างเช่นหากคุณใช้ Rails คุณจะต้องแปลงข้อมูล JSON เป็นแบบจำลองไบนารีจากนั้นแสดงอีกครั้งเป็น JSON ผ่าน HTTP เมื่อข้อมูลถูกใช้โดย backbone.js, angle ฯลฯ หรือแม้แต่ jQuery AJAX ปกติ โทร. ด้วย Node.js คุณสามารถแสดงออบเจ็กต์ JSON ของคุณด้วย REST API เพื่อให้ไคลเอ็นต์ใช้ นอกจากนี้คุณไม่จำเป็นต้องกังวลเกี่ยวกับการแปลงระหว่าง JSON กับสิ่งอื่นใดเมื่ออ่านหรือเขียนจากฐานข้อมูลของคุณ (หากคุณใช้ MongoDB) สรุปได้ว่าคุณสามารถหลีกเลี่ยงความจำเป็นในการแปลงหลายรายการโดยใช้รูปแบบการจัดลำดับข้อมูลที่สอดคล้องกันทั้งในไคลเอนต์เซิร์ฟเวอร์และฐานข้อมูล
หากคุณได้รับข้อมูลจำนวนมากพร้อมกันฐานข้อมูลของคุณอาจหายใจไม่ออก ตามที่อธิบายไว้ข้างต้น Node.js สามารถจัดการการเชื่อมต่อพร้อมกันในเวลาเดียวกันได้อย่างง่ายดาย แต่เนื่องจากการเข้าถึงฐานข้อมูลเป็นการดำเนินการบล็อก (ในกรณีนี้) เราจึงประสบปัญหา วิธีแก้ปัญหาคือการรับรู้พฤติกรรมของไคลเอนต์ก่อนที่ข้อมูลจะถูกเขียนไปยังฐานข้อมูลจริง
ด้วยวิธีการดังกล่าวระบบจะรักษาความอ่อนไหวภายใต้ภาระหนักซึ่งมีประโยชน์อย่างยิ่งเมื่อลูกค้าไม่ต้องการการยืนยันที่ชัดเจนในการเขียนข้อมูลที่ถูกต้อง ตัวอย่างทั่วไป ได้แก่ การบันทึกหรือการเขียนข้อมูลการติดตามผู้ใช้การประมวลผลแบบเป็นกลุ่มที่ไม่ได้ใช้จนกว่าจะถึงเวลาต่อมาตลอดจนการดำเนินการที่ไม่จำเป็นต้องแสดงผลทันที (เช่นการอัปเดตจำนวนไลค์ของ Facebook) ซึ่งความสอดคล้องขั้นสุดท้าย (บ่อยมาก ใช้ในโลก NoSQL) เป็นที่ยอมรับ
ข้อมูลถูกจัดคิวผ่านแคชหรือการจัดคิวข้อความบางประเภท (ตัวอย่างเช่นโครงสร้างพื้นฐาน RabbitMQ , ZeroMQ ) และสรุปโดยกระบวนการแยกต่างหากที่เขียนเป็นชุดงานการคำนวณหรือการประมวลผลบริการแบ็กเอนด์แบบเข้มข้นซึ่งเขียนในแพลตฟอร์มประสิทธิภาพที่ดีขึ้นสำหรับงานดังกล่าว พฤติกรรมที่คล้ายกันสามารถนำไปใช้กับภาษา / เฟรมเวิร์กอื่น ๆ ได้ แต่ใช้กับฮาร์ดแวร์เดียวกันหรือมีความสูงเท่ากันไม่ได้เพื่อรักษาประสิทธิภาพ
บรรทัดล่าง: ด้วย Node คุณสามารถผลักฐานข้อมูลที่เขียนไว้ออกไปและจัดการกับมันในภายหลังเพื่อดำเนินการต่อราวกับว่ามันสำเร็จ
ในแพลตฟอร์มเว็บแบบเดิมมากขึ้นคำขอและการตอบกลับ HTTP จะถือว่าเป็นเหตุการณ์ที่แยกจากกัน จริงๆแล้วมันเป็นเรื่องธรรมดาจริงๆ การสังเกตนี้สามารถใช้ใน Node.js เพื่อสร้างฟีเจอร์เจ๋ง ๆ ตัวอย่างเช่นเป็นไปได้ที่จะประมวลผลไฟล์ในขณะที่กำลังอัปโหลดเนื่องจากข้อมูลเข้าสู่สตรีมและสามารถประมวลผลได้ในแนวแฟชั่น สิ่งนี้สามารถทำได้ในแบบเรียลไทม์สำหรับการเข้ารหัสเสียงหรือวิดีโอเป็นพร็อกซีระหว่างแหล่งข้อมูลต่างๆ (ดูหัวข้อถัดไป)
โหนด PROXY.js ใช้เป็นพร็อกซีเซิร์ฟเวอร์ซึ่งสามารถจัดการการเชื่อมต่อพร้อมกันจำนวนมากในโหมดไม่ปิดกั้น เป็นประโยชน์อย่างยิ่งสำหรับการพร็อกซีบริการที่แตกต่างกันซึ่งมีเวลาตอบสนองที่แตกต่างกันหรือเพื่อรวบรวมข้อมูลจากจุดเริ่มต้นต่างๆ
ตัวอย่าง: พิจารณาแอปพลิเคชันเซิร์ฟเวอร์ที่สื่อสารกับทรัพยากรของบุคคลที่สามการดึงข้อมูลจากแหล่งต่างๆหรือการจัดเก็บเนื้อหาเช่นรูปภาพและวิดีโอไปยังบริการคลาวด์ของบุคคลที่สาม
แม้ว่าจะมีพร็อกซีเซิร์ฟเวอร์เฉพาะ แต่การใช้ Node แทนอาจมีประโยชน์หากโครงสร้างพื้นฐานพร็อกซีเซิร์ฟเวอร์ของคุณไม่มีอยู่จริงหรือหากคุณต้องการโซลูชันสำหรับการพัฒนาภายใน ด้วยเหตุนี้ฉันหมายความว่าคุณสามารถสร้างแอปพลิเคชันฝั่งไคลเอ็นต์ที่มีเซิร์ฟเวอร์การพัฒนา Node.js สำหรับเนื้อหาเช่นคำขอพร็อกซี / สต็อก API ในขณะที่ใช้งานจริงคุณจะจัดการการโต้ตอบดังกล่าวกับบริการพร็อกซีเฉพาะ (nginx, HAProxy เป็นต้น ).
กลับไปที่ระดับแอปพลิเคชันกันเถอะ อีกตัวอย่างหนึ่งที่ซอฟต์แวร์เดสก์ท็อปครอบงำ แต่สามารถแทนที่ได้อย่างง่ายดายด้วยเว็บแบบเรียลไทม์คือโซลูชันตัวแทนซอฟต์แวร์เชิงพาณิชย์ ใช้เพื่อติดตามราคาหุ้นทำการคำนวณและวิเคราะห์ทางเทคนิคและสร้างแผนภูมิและไดอะแกรม
สวิตช์แบบเรียลไทม์เป็นโซลูชันบนเว็บที่ช่วยให้โบรกเกอร์สามารถเปลี่ยนเวิร์กสเตชันหรือสถานที่ทำงานได้อย่างง่ายดาย อีกไม่นานเราจะได้เห็นพวกเขาบนชายหาดในฟลอริดาอิบิซา ... หรือบาหลี
อีกกรณีการใช้งานทั่วไปที่ Node-con-web-sockets เหมาะอย่างยิ่งคือการติดตามผู้เยี่ยมชมเว็บไซต์และดูการโต้ตอบของพวกเขาแบบเรียลไทม์ (หากคุณสนใจไอเดียนี้ผลิตโดยColibríแล้ว)
คุณสามารถรวบรวมสถิติแบบเรียลไทม์จากผู้ใช้ของคุณหรือแม้แต่ขึ้นไปอีกระดับด้วยการแนะนำการโต้ตอบกับผู้เยี่ยมชมของคุณโดยการเปิดช่องทางการสื่อสารเมื่อพวกเขาไปถึงจุดหนึ่งในช่องทาง (หากคุณสนใจไอเดียนี้ผลิตโดย CANDDi แล้ว)
ลองนึกภาพว่าธุรกิจของคุณจะดีขึ้นได้อย่างไรหากคุณรู้ว่าผู้เยี่ยมชมของคุณกำลังทำอะไรแบบเรียลไทม์ หากคุณเห็นภาพการโต้ตอบของพวกเขา ด้วยเวลาจริงตอนนี้คุณสามารถใช้ Node.js ได้สองวิธี
ตอนนี้แผงการตรวจสอบระบบมาทำความรู้จักกับมุมมองโครงสร้างพื้นฐานของสิ่งต่างๆ ตัวอย่างเช่นลองนึกภาพผู้ให้บริการ SaaS ที่ต้องการให้บริการตรวจสอบแก่ผู้ใช้ (เช่นหน้า GitHub) ด้วยเหตุการณ์ Node.js-loop เราสามารถสร้างแดชบอร์ดบนเว็บที่มีประสิทธิภาพซึ่งตรวจสอบสถานะบริการแบบอะซิงโครนัสและส่งข้อมูลไปยังไคลเอนต์โดยใช้ Websockets
ทั้งภายใน (ภายใน บริษัท ) และบริการสาธารณะของรัฐสามารถรายงานสดและแบบเรียลไทม์โดยใช้เทคโนโลยีนี้ ผลักดันแนวคิดนี้อีกเล็กน้อยและลองจินตนาการถึงศูนย์ปฏิบัติการเครือข่าย (NOC) ในการตรวจสอบแอปพลิเคชันของผู้ให้บริการโทรคมนาคมผู้ให้บริการคลาวด์ / เครือข่าย / โฮสติ้งหรือสถาบันการเงินบางแห่งซึ่งทำงานบนเว็บสแต็กแบบเปิดที่รองรับโดย Node.js และ Websockets แทน Java และ / หรือ Java applets
หมายเหตุ: อย่าพยายามสร้างระบบฮาร์ดเรียลไทม์ในโหนด (นั่นคือระบบที่ต้องการเวลาตอบสนองที่สม่ำเสมอ) Erlang น่าจะเป็นทางเลือกที่ดีกว่าสำหรับแอปพลิเคชันประเภทนี้
Node.js พร้อม Express.js สามารถใช้เพื่อสร้างเว็บแอปพลิเคชันแบบคลาสสิกบนเซิร์ฟเวอร์ อย่างไรก็ตามตราบเท่าที่เป็นไปได้กระบวนทัศน์การตอบสนองการร้องขอ Node.js นี้จะใช้ HTML มันไม่ใช่กรณีการใช้งานทั่วไป มีข้อโต้แย้งที่ต้องยอมรับและต่อต้านแนวทางนี้ นี่คือข้อเท็จจริงบางประการที่ควรพิจารณา:
หากแอปพลิเคชันของคุณไม่ได้ใช้ CPU มากคุณสามารถสร้าง Javascript จากบนลงล่างได้แม้ในระดับฐานข้อมูลหากคุณใช้ออบเจ็กต์หน่วยเก็บข้อมูล JSON เช่น MongoDB DB สิ่งนี้เอื้อต่อการพัฒนา (รวมถึงการจ้างงาน) อย่างมาก
โปรแกรมรวบรวมข้อมูลได้รับการตอบกลับ HTML อย่างสมบูรณ์ซึ่งเป็นมิตรกับ SEO มากขึ้นกล่าวคือหน้าเดียวหรือแอป Websockets ทำงานบน Node.js
CPU ที่เน้นการประมวลผลจะบล็อกการตอบสนองของ Node.js ดังนั้นอุปกรณ์เธรดจึงเป็นแนวทางที่ดีกว่า หรือคุณอาจลองปรับขนาดการนับ [*]
การใช้ Node.js กับฐานข้อมูลเชิงสัมพันธ์ยังค่อนข้างเจ็บปวด (อ่านรายละเอียดเพิ่มเติมด้านล่าง) ให้ความสำคัญกับตัวเองและเลือกสภาพแวดล้อมอื่น ๆ เช่น Rails, Django หรือ ASP.NET MVC หากคุณกำลังพยายามดำเนินการเชิงสัมพันธ์
ตัวอย่างเช่นการเปรียบเทียบ Node.js กับ Express.js กับ Ruby on Rails มีการตัดสินใจที่ชัดเจนเกี่ยวกับการเข้าถึงข้อมูลเชิงสัมพันธ์ฐานข้อมูลเชิงสัมพันธ์พร้อมเครื่องมือสำหรับ Node.js ยังอยู่ในช่วงแรก ๆ ขั้นตอน; มันค่อนข้างจะคลอดก่อนกำหนดดังนั้นจึงไม่น่าทำงานด้วย ในทางกลับกัน Rails จะให้ข้อมูลการกำหนดค่าการเข้าถึงด้านขวาของกล่องโดยอัตโนมัติพร้อมกับสคีมาฐานข้อมูลและเครื่องมือสนับสนุนการย้ายข้อมูลจาก Gems อื่น ๆ (ที่มีความหมายสองชั้น) Rails และเฟรมเวิร์กคู่กันได้รับการพัฒนาและพิสูจน์แล้วว่า Active Record Data Mapper รวบรวมการใช้งานการเข้าถึงข้อมูลที่คุณจะพลาดหากคุณพยายามทำซ้ำด้วย JavaScript บริสุทธิ์ [*]
อย่างไรก็ตามหากคุณมีแนวโน้มที่จะอยู่ใน JS ตลอดทางให้จับตาดู Sequelize ORM และ Node2 เนื่องจากทั้งคู่ยังไม่บรรลุนิติภาวะ แต่ในที่สุดก็สามารถใช้ภาษาโปรแกรมอื่น ๆ ได้
[] เป็นไปได้และไม่ใช่เรื่องแปลกที่คุณจะใช้ Node เพียงอย่างเดียวในฐานะส่วนหน้าโดยรักษา Rails back-end ไว้และเข้าถึงฐานข้อมูลเชิงสัมพันธ์ได้ง่าย
เมื่อพูดถึงการใช้คอมพิวเตอร์หนัก Node.js ไม่ใช่แพลตฟอร์มที่ดีที่สุด คุณไม่ต้องการสร้างเซิร์ฟเวอร์คำนวณ Fibonacci ใน Node.js อย่างแน่นอน โดยทั่วไปการดำเนินการที่ใช้ CPU มากจะปฏิเสธผลประโยชน์ด้านประสิทธิภาพทั้งหมดและจะบล็อกคำขอที่เข้ามาจากเธรด
ตามที่ระบุไว้ข้างต้น Node.js เป็น Single-threaded และใช้ CPU core เดียว เมื่อพูดถึงการเพิ่มการทำงานพร้อมกันบนเซิร์ฟเวอร์แบบมัลติคอร์มีงานบางอย่างที่ทำโดยโหนดพื้นฐานในรูปแบบของโมดูลคลัสเตอร์ [อ้างอิง: http://nodejs.org/api/cluster.html ]. คุณยังสามารถรันหลาย ๆ อินสแตนซ์ของเซิร์ฟเวอร์ Node.js ได้อย่างง่ายดายหลัง reverse proxy ผ่าน nginx
ด้วยการรวมกลุ่มคุณต้องยกเลิกการโหลดการคำนวณที่หนักหน่วงทั้งหมดเพื่อประมวลผลพื้นหลังที่เขียนขึ้นภายในสภาพแวดล้อมที่เหมาะสมกว่าและให้พวกเขาสื่อสารผ่านการจัดคิวข้อความเป็น RabbitMQ
แม้ว่าการประมวลผลพื้นหลังของคุณอาจทำงานบนเซิร์ฟเวอร์เดียวกันในตอนแรก แต่วิธีนี้มีศักยภาพในการปรับขนาดได้สูงมาก บริการประมวลผลพื้นหลังสามารถแจกจ่ายให้กับผู้ปฏิบัติงานได้อย่างง่ายดายโดยไม่ขึ้นกับเซิร์ฟเวอร์โดยไม่จำเป็นต้องกำหนดค่าโหลดของเว็บเซิร์ฟเวอร์ต่างๆ
corp to corp เทียบกับเครื่องคิดเลข w2
แน่นอนว่าคุณจะใช้แนวทางเดียวกันนี้บนแพลตฟอร์มอื่น ๆ เช่นกัน แต่ด้วย Node.js คุณจะสามารถบรรลุ reqs / s สูงที่เราได้พูดถึงเนื่องจากแต่ละคำขอเป็นงานเล็ก ๆ และจัดการได้อย่างรวดเร็วและมีประสิทธิภาพ
เราได้พูดคุยเกี่ยวกับ Node.js จากทฤษฎีเชิงปฏิบัติโดยเริ่มจากเป้าหมายและความทะเยอทะยานและจบลงด้วยจุดที่น่าสนใจและข้อผิดพลาด เมื่อผู้คนมีปัญหากับ Node พวกเขามักจะอนุมานได้ว่าการดำเนินการบล็อกเป็นรากเหง้าของความชั่วร้ายทั้งหมด 99% ของการละเมิดโหนดเป็นผลโดยตรง
ข้อควรจำ: Node.js ไม่เคยสร้างขึ้นเพื่อแก้ปัญหาการคำนวณมาตราส่วน มันถูกสร้างขึ้นเพื่อแก้ปัญหาการปรับขนาด I / O ซึ่งทำได้ดีมาก
ทำไมต้องใช้ Node.js หากกรณีการใช้งานไม่มีการใช้งาน CPU ที่เข้มข้นหรือการเข้าถึงทรัพยากรการบล็อกคุณสามารถใช้ประโยชน์จากประโยชน์ของ Node.js และเพลิดเพลินกับแอปพลิเคชันเครือข่ายที่รวดเร็วและปรับขนาดได้ ยินดีต้อนรับสู่เว็บแบบเรียลไทม์
Tomislav Capan , โครเอเชีย
Tomislav เป็นวิศวกรซอฟต์แวร์ที่ปรึกษาด้านเทคนิคและสถาปนิกที่มีประสบการณ์มากกว่า 10 ปี เขาเชี่ยวชาญด้าน Full-Slack และมีทักษะสูงใน JavaScript และ Node.jr. มีประสบการณ์การทำงานใน C #, Java และ Ruby เขาเป็นผู้ปฏิบัติงาน Kanban ที่คล่องแคล่วและชอบทำงานร่วมกันในโครงการพัฒนา