โหนดจัดเตรียมโมดูลการเขียนโปรแกรมเครือข่ายที่หลากหลาย
| โมดูลโหนด | โปรโตคอล |
| สุทธิ | TCP |
| dgram | UDP |
| http | http |
| https | https |
กิจกรรมบริการ TCP แบ่งออกเป็นสองประเภทต่อไปนี้
(1) เหตุการณ์เซิร์ฟเวอร์
สำหรับเซิร์ฟเวอร์ที่สร้างขึ้นผ่าน net.createServer () มันเป็นอินสแตนซ์ Eventemitter และมีหลายเหตุการณ์ที่กำหนดเอง:
การฟัง: ทริกเกอร์หลังจากการโทรฟัง () เพื่อผูกพอร์ตหรือซ็อกเก็ตโดเมนย่อเป็นเซิร์ฟเวอร์ฟัง (พอร์ตผู้ฟัง) ผ่านพารามิเตอร์ที่สอง
การเชื่อมต่อ: ทริกเกอร์เมื่อซ็อกเก็ตไคลเอนต์แต่ละตัวเชื่อมต่อกับเซิร์ฟเวอร์ วิธีง่ายๆคือการผ่านพารามิเตอร์สุดท้ายผ่าน net.createServer ()
ปิด: ทริกเกอร์เมื่อปิดเซิร์ฟเวอร์ หลังจากโทร Server.close () เซิร์ฟเวอร์จะหยุดรับการเชื่อมต่อซ็อกเก็ตใหม่ แต่ให้การเชื่อมต่อที่มีอยู่ในปัจจุบันและรอการเชื่อมต่อทั้งหมดที่จะตัดการเชื่อมต่อเหตุการณ์นี้จะถูกทริกเกอร์
ข้อผิดพลาด: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อมีข้อยกเว้นเกิดขึ้นบนเซิร์ฟเวอร์
(2) เหตุการณ์การเชื่อมต่อ
เซิร์ฟเวอร์สามารถรักษาการเชื่อมต่อกับไคลเอนต์หลายตัวในเวลาเดียวกันวัตถุสตรีมที่เขียนได้และอ่านง่ายสำหรับการเชื่อมต่อแต่ละครั้ง วัตถุสตรีมสามารถใช้สำหรับการสื่อสารระหว่างเซิร์ฟเวอร์และไคลเอนต์ พวกเขาสามารถอ่านข้อมูลที่ส่งจากปลายด้านหนึ่งจากปลายด้านหนึ่งผ่านเหตุการณ์ข้อมูลหรือส่งข้อมูลจากปลายด้านหนึ่งไปอีกด้านหนึ่งผ่านวิธีการเขียน ()
ข้อมูล: เมื่อการโทรด้านหนึ่งเขียน () เพื่อส่งข้อมูลอีกด้านหนึ่งจะเรียกเหตุการณ์ข้อมูล ข้อมูลที่ส่งผ่านโดยเหตุการณ์คือข้อมูลที่ส่งโดยเขียน ()
สิ้นสุด: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อปลายทั้งสองของการเชื่อมต่อส่งข้อมูล FIN
เชื่อมต่อ: เหตุการณ์นี้ใช้สำหรับไคลเอนต์และจะถูกไล่ออกเมื่อซ็อกเก็ตเชื่อมต่อกับเซิร์ฟเวอร์สำเร็จ
Drain: เมื่อการโทรสิ้นสุดทั้งสองเขียน () เพื่อส่งข้อมูลปลายปัจจุบันจะกระตุ้นเหตุการณ์
ข้อผิดพลาด: เมื่อมีการส่งข้อยกเว้น
ปิด: ยิงเมื่อซ็อกเก็ตปิดสนิท
การหมดเวลา: เมื่อการเชื่อมต่อไม่ทำงานอีกต่อไปหลังจากระยะเวลาหนึ่งให้เรียกเหตุการณ์เพื่อแจ้งให้ผู้ใช้ทราบว่าการเชื่อมต่อนั้นไม่ได้ใช้งาน
TCP มีกลยุทธ์การเพิ่มประสิทธิภาพบางอย่างสำหรับแพ็คเก็ตข้อมูลขนาดเล็กในเครือข่าย: อัลกอริทึม Nagle ซึ่งจะถูกเรียกใช้เฉพาะเมื่อข้อมูลถึงจำนวนหนึ่ง
บริการ UDP
UDP เรียกว่าโปรโตคอลแพ็คเก็ตผู้ใช้และไม่ใช่บริการที่มุ่งเน้นการเชื่อมต่อ UDP ในโหนดเป็นเพียงอินสแตนซ์ Eventemitter ไม่ใช่อินสแตนซ์สตรีมที่มีเหตุการณ์ที่กำหนดเองต่อไปนี้:
(1) ข้อความ: เมื่อซ็อกเก็ต UDP ตรวจสอบพอร์ตการ์ดเครือข่ายและรับข้อความข้อมูลที่เรียกโดยทริกเกอร์คือวัตถุบัฟเฟอร์ข้อความและข้อมูลที่อยู่ระยะไกล
(2) การฟัง: เหตุการณ์นี้ถูกทริกเกอร์เมื่อซ็อกเก็ต UDP เริ่มฟัง
(3) ปิด: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อมีการเรียกวิธีการปิด () และเหตุการณ์ข้อความจะไม่ถูกเรียกใช้อีกต่อไป หากเหตุการณ์ข้อความจำเป็นต้องถูกเรียกใช้อีกครั้งมันจะต้องได้รับการ rebinded
(4) ข้อผิดพลาด: ทริกเกอร์เมื่อมีข้อยกเว้นเกิดขึ้น หากไม่ได้ฟังมันจะถูกโยนลงไปโดยตรงทำให้กระบวนการออก
บริการ http
โมดูล HTTP ในโหนดสืบทอดมาจากเซิร์ฟเวอร์ TCP (โมดูลสุทธิ) ซึ่งสามารถรักษาการเชื่อมต่อกับไคลเอนต์หลายตัว เนื่องจากมันไม่ได้สร้างเธรดสำหรับการเชื่อมต่อแต่ละครั้งและรักษารอยเท้าหน่วยความจำที่ต่ำมากจึงสามารถบรรลุพร้อมกันได้สูง ความแตกต่างระหว่างบริการ HTTP และบริการ TCP คือหลังจากเปิดใช้งาน Keepalive เซสชัน TCP สามารถใช้สำหรับการร้องขอและการตอบกลับหลายครั้ง บริการ TCP ใช้เป็นหน่วยสำหรับการเชื่อมต่อและใช้บริการ HTTP เป็นหน่วยสำหรับการร้องขอ โมดูล HTTP คือการห่อหุ้มกระบวนการเชื่อมต่อกับการร้องขอ
โมดูล HTTP สรุปการอ่านและเขียนซ็อกเก็ตที่ใช้ในการเชื่อมต่อกับวัตถุ ServerRequest และ ServerResponse ซึ่งสอดคล้องกับการร้องขอและการตอบสนองตามลำดับ
(1) คำขอ http
สำหรับการดำเนินการอ่านของการเชื่อมต่อ TCP โมดูล HTTP จะห่อหุ้มเป็นวัตถุ ServerRequest ตัวอย่างเช่นส่วนส่วนหัว req.method, req.url, req.headers ส่วนข้อมูลระบบข้อความจะถูกสรุปลงในวัตถุสตรีมแบบอ่านอย่างเดียว หากตรรกะทางธุรกิจจำเป็นต้องอ่านข้อมูลในระบบข้อความจะต้องดำเนินการสตรีมข้อมูลก่อนที่จะสามารถดำเนินการได้
(2) การตอบสนอง http
การตอบสนอง HTTP ห่อหุ้มการดำเนินการเขียนของการเชื่อมต่อพื้นฐานซึ่งถือได้ว่าเป็นวัตถุสตรีมที่เขียนได้
วิธีการข้อมูลส่วนหัวของแพ็คเก็ตตอบสนอง: res.Setheader () และวิธีการ res.writeHeader () คุณสามารถ Setheader ได้หลายครั้งสำหรับการตั้งค่า แต่คุณต้องเรียก Writeheader เพื่อเขียนไปยังการเชื่อมต่อก่อนที่จะมีผล
วิธีการบางส่วนของข้อความ: res.write () และ res.end () วิธีการ
(3) เหตุการณ์เซิร์ฟเวอร์ HTTP
การเชื่อมต่อ: เมื่อไคลเอนต์สร้างการเชื่อมต่อ TCP กับเซิร์ฟเวอร์เหตุการณ์การเชื่อมต่อจะถูกทริกเกอร์
คำขอ: หลังจากสร้างการเชื่อมต่อ TCP โมดูล HTTP บทสรุปคำขอ HTTP และการตอบกลับ HTTP จากสตรีมข้อมูล เมื่อข้อมูลคำขอถูกส่งไปยังเซิร์ฟเวอร์เหตุการณ์จะถูกทริกเกอร์หลังจากส่วนหัวคำขอ HTTP ถูกแยกวิเคราะห์ หลังจาก res.end () การเชื่อมต่อ TCP สามารถใช้สำหรับคำขอถัดไป
ปิด: เรียกเมธอดเซิร์ฟเวอร์เพื่อหยุดรับการเชื่อมต่อใหม่ทริกเกอร์เหตุการณ์นี้เมื่อการเชื่อมต่อที่มีอยู่ทั้งหมดถูกตัดการเชื่อมต่อ
CheckContinue: เมื่อลูกค้าบางรายส่งข้อมูลที่ใหญ่ขึ้นพวกเขาจะส่งคำขอด้วยความคาดหวังก่อน: 100-continue ในส่วนหัวไปยังเซิร์ฟเวอร์และบริการกระตุ้นเหตุการณ์;
เชื่อมต่อ: ทริกเกอร์เมื่อไคลเอนต์เริ่มคำขอเชื่อมต่อ
การอัพเกรด: เมื่อไคลเอนต์ต้องการการอัพเกรดโปรโตคอลการเชื่อมต่อจะต้องเจรจากับเซิร์ฟเวอร์ ไคลเอนต์จะนำฟิลด์ updagrade ในส่วนหัวคำขอ
ClientError: ไคลเอนต์ที่เชื่อมต่อส่งข้อผิดพลาดและข้อผิดพลาดจะถูกส่งไปยังเซิร์ฟเวอร์และเหตุการณ์จะถูกทริกเกอร์
(4) ไคลเอนต์ HTTP
โมดูล HTTP ให้ http.request (ตัวเลือก, เชื่อมต่อ) สำหรับการสร้างไคลเอนต์ HTTP
ไคลเอนต์ HTTP คล้ายกับเซิร์ฟเวอร์ ในวัตถุ ClientRequest เหตุการณ์เรียกว่าการตอบสนอง เมื่อ ClientRequest แยกวิเคราะห์ข้อความตอบกลับเหตุการณ์การตอบกลับจะถูกเรียกทันทีที่ส่วนหัวตอบกลับถูกแยกวิเคราะห์ ในขณะเดียวกันลูกค้าวัตถุตอบสนองจะถูกส่งผ่านเพื่อดำเนินการ ข้อความตอบกลับที่ตามมามีให้ในสตรีมแบบอ่านอย่างเดียว
(5) เหตุการณ์ไคลเอนต์ HTTP
การตอบสนอง: ไคลเอนต์ที่สอดคล้องกับเหตุการณ์คำขอบนเซิร์ฟเวอร์ทริกเกอร์เหตุการณ์เมื่อคำขอได้รับการตอบกลับหลังจากมีการออกคำขอ
ซ็อกเก็ต: ยิงเมื่อการเชื่อมต่อที่จัดตั้งขึ้นในพูลการเชื่อมต่อพื้นฐานถูกกำหนดให้กับวัตถุคำขอปัจจุบัน;
เชื่อมต่อ: เมื่อไคลเอนต์ส่งคำขอเชื่อมต่อไปยังเซิร์ฟเวอร์หากเซิร์ฟเวอร์ตอบกลับไปยังรหัสสถานะ 200 รหัสไคลเอนต์จะทริกเกอร์เหตุการณ์
การอัพเกรด: เมื่อไคลเอนต์สนุกกับคำขออัพเกรดเมื่อไคลเอนต์สนุกกับเซิร์ฟเวอร์ส่งคำขออัพเกรดหากเซิร์ฟเวอร์ตอบสนองต่อสถานะการสลับ 101 โปรโตคอลไคลเอนต์จะเรียกเหตุการณ์
ดำเนินการต่อ: หลังจากที่ลูกค้าเริ่มต้นความคาดหวัง: ข้อมูลส่วนหัวต่อเนื่อง 100 ครั้งไปยังเซิร์ฟเวอร์มันพยายามส่งข้อมูลขนาดใหญ่ขึ้น หากเซิร์ฟเวอร์ตอบสนองต่อสถานะต่อไป 100 สถานะเซิร์ฟเวอร์จะทริกเกอร์เหตุการณ์
บริการ WebSocket
WebSocket ปรากฏตัวครั้งแรกเป็นคุณลักษณะสำคัญของ HTML5 และมีข้อได้เปรียบต่อ HTTP:
(1) ไคลเอนต์และเซิร์ฟเวอร์สร้างการเชื่อมต่อ TCP เพียงครั้งเดียวและสามารถใช้การเชื่อมต่อได้น้อยลง
(2) WebSocket Server สามารถส่งข้อมูลไปยังไคลเอนต์ซึ่งมีความยืดหยุ่นและมีประสิทธิภาพมากกว่าโหมดตอบสนอง HTTP
(3) ส่วนหัวโปรโตคอลที่เบากว่าเพื่อลดการส่งข้อมูล
ไม่มีห้องสมุดในตัว WebSocket ในโหนด แต่โมดูล WS ของชุมชนสรุปการใช้งาน WebSocket เช่น Socket.io ที่มีชื่อเสียง