9.1. ทำไมต้องใช้เครือข่าย¶
การควบคุมฮาร์ดแวร์ให้กล้องมีวิธีสื่อสารกับอุปกรณ์เฉพาะอื่นบนสายเฉพาะอื่น UART ระหว่างกล้องกับบอร์ดคู่เดี่ยว I2C ระหว่างกล้องกับเซนเซอร์ที่ห้อยอยู่บนบัสสั้นเดียวกัน CAN ระหว่างชุดโมดูลขนาดเล็กที่ใช้บัสที่แข็งแกร่งเพียงตัวเดียว แต่ละกรณีมีรูปแบบเดิม: สองฝ่าย (หรือกลุ่มเล็กที่รู้จักกัน) สื่อกลางเดียวที่ใช้ร่วมกัน ข้อตกลงระหว่างพวกเขาว่าไบต์บนสื่อนั้นหมายความว่าอะไร
9.1.1. รูปแบบนั้นหยุดปรับขนาดได้¶
รูปแบบ point-to-point ใช้งานได้ตราบเท่าที่ทั้งสองฝั่งอยู่ใกล้กัน ทั้งสองฝั่งรู้จักกันล่วงหน้า และสคริปต์เลือกได้ว่าจะคุยผ่านสายใด เมื่อข้อจำกัดใด ๆ เหล่านั้นหมดไป การเดินสายก็ไม่พอแล้ว
คู่สื่อสารหลายราย เครือข่ายกล้องห้าสิบตัวที่รายงานไปยังเซิร์ฟเวอร์เดียวไม่สามารถต่อสายแบบหนึ่งต่อหนึ่งได้ เซิร์ฟเวอร์ไม่มี UART เพียงพอ และการวางสายก็เป็นไปไม่ได้
คู่สื่อสารที่ไม่อยู่บนสายเดียวกัน กล้องในโรงงานและแดชบอร์ดในสำนักงานอีกฝั่งของเมืองไม่สามารถใช้สาย serial ร่วมกันได้ ต้องมีเส้นทางระหว่างพวกเขาผ่านโครงสร้างพื้นฐานที่มีอยู่แล้วระหว่างอาคารสองหลัง
คู่สื่อสารที่ไม่รู้จักล่วงหน้า กล้องที่เผยแพร่ผลลัพธ์ไปยังคลาวด์ไม่ได้เลือกว่าจะคุยกับเซิร์ฟเวอร์ใดในแผนผังการเดินสาย ที่อยู่ของคลาวด์คือสิ่งที่สคริปต์ค้นหาในเวลารันไทม์และส่งข้อมูลไปยัง
หลายโปรแกรมบนสายเดียว แล็ปท็อปในปัจจุบันรันเบราว์เซอร์ แอปแชท การประชุมทางวิดีโอ และการสำรองข้อมูล ทั้งหมดสื่อสารผ่านอินเทอร์เฟซเครือข่ายเดียวกันพร้อมกัน สายไม่สามารถ "เป็นของ" การสนทนาหนึ่งได้เหมือน UART
ความล้มเหลวแต่ละอย่างเหล่านั้นคือปัญหาการ adressing ประเภท ที่แตกต่างกัน การแก้ทั้งหมดพร้อมกันต้องการมากกว่าสายและอัตราบอด
9.1.2. เครือข่ายคืออะไร¶
เครือข่าย คือโครงสร้างพื้นฐานที่ให้คอมพิวเตอร์จำนวนมากแลกเปลี่ยนข้อความกับคอมพิวเตอร์เครื่องใดก็ได้ โดยไม่ต้องการลิงก์เฉพาะของแต่ละคู่ สามคุณสมบัติทำให้เครือข่ายเป็นอะไรบางอย่างที่มากกว่าสาย serial ขนาดใหญ่:
สื่อกลางที่ใช้ร่วมกัน อุปกรณ์หลายชิ้นเชื่อมต่อกับสาย สวิตช์ หรือช่องวิทยุเดียวกัน พวกเขาผลัดกันใช้หรือมัลติเพล็กซ์เพื่อให้การสนทนามากกว่าหนึ่งครั้งสามารถใช้ลิงก์กายภาพเดียวกันได้
ที่อยู่เชิงตรรกะ อุปกรณ์แต่ละชิ้นมีหมายเลขที่ระบุตัวตนโดยไม่ขึ้นอยู่กับสายที่เสียบอยู่ การส่งข้อความหมายถึงการเขียนหมายเลขนั้นบนข้อความ ไม่ใช่การเชื่อมต่อสายเฉพาะ
Routing เมื่อผู้ส่งและผู้รับไม่อยู่บนเซกเมนต์ท้องถิ่นเดียวกัน โครงสร้างพื้นฐาน ระหว่าง พวกเขาจะพาข้อความไปทีละก้าว จุดสิ้นสุดไม่รู้เส้นทาง พวกเขาแค่รู้ที่อยู่ของกันและกัน
แล็ปท็อปบน Wi-Fi ในสำนักงานที่เข้าถึงเซิร์ฟเวอร์ในดาต้าเซ็นเตอร์ที่ห่างไกลใช้ทั้งสามอย่าง ลิงก์ Wi-Fi คือสื่อกลางวิทยุที่ใช้ร่วมกัน แล็ปท็อปและเซิร์ฟเวอร์ต่างมีที่อยู่เชิงตรรกะของตัวเอง ข้อความเดินทางผ่านโครงสร้างพื้นฐานใดก็ตามที่อยู่ระหว่างสองเครื่อง โดยส่งต่อทีละก้าว ผู้ใช้คลิกลิงก์ แล็ปท็อปส่งแพ็กเก็ต และเครือข่ายจัดการส่วนที่เหลือ
9.1.3. แล้วกล้องล่ะ?¶
กล้องทำบทบาทเดียวกันบนเครือข่ายกับแล็ปท็อป มันรับที่อยู่เชิงตรรกะเมื่อเข้าร่วมเครือข่าย กำหนดที่อยู่ข้อความขาออกไปยังที่อยู่เชิงตรรกะของอุปกรณ์อื่น และให้โครงสร้างพื้นฐาน route ข้อความเหล่านั้น
สิ่งที่เปลี่ยนแปลงจากบทควบคุมฮาร์ดแวร์คือ อินเทอร์เฟซ แทนที่จะเปิดอินสแตนซ์ UART และเขียนไบต์ไปยังมัน สคริปต์จะเปิด socket และเขียนไบต์ไปยังนั้นแทน socket คือจุดสิ้นสุดเข้าสู่เครือข่าย เช่นเดียวกับที่อินสแตนซ์ UART คือจุดสิ้นสุดเข้าสู่สาย ส่วนประกอบระหว่าง socket และสาย -- เฟรม, แพ็กเก็ต, ตารางการ routing, สวิตช์, วิทยุ -- ทั้งหมดอยู่ด้านล่างและมองไม่เห็นเป็นส่วนใหญ่สำหรับโค้ด Python
หน้าถัดไปจะอธิบายส่วนประกอบเหล่านั้นทีละชั้น เพื่อให้ abstraction "เปิด socket และส่งไบต์" รู้สึกเป็นสิ่งที่หลีกเลี่ยงไม่ได้แทนที่จะเป็นเรื่องมหัศจรรย์