ซ็อกเก็ตทำงานผ่านการเชื่อมต่อไร้สายได้อย่างไร


15

ฉันทำงานเฉพาะแอปพลิเคชันฝั่งไคลเอ็นต์ (โดยเฉพาะมือถือ) โดยใช้ Android ซึ่งระบบเครือข่ายทั้งหมดได้รับการจัดการที่เลเยอร์ HTTP โดยใช้เฟรมเวิร์กที่มีส่วนประกอบต่างๆเช่น HttpUrlConnection

แต่ระบบการส่งข้อความแบบพุชเช่น Websockets / XMPP ฯลฯ ทั้งหมดรักษาการเชื่อมต่อแบบถาวรกับเซิร์ฟเวอร์ แม้แต่ GCM ของ Google ซึ่งอบลงในอุปกรณ์ที่รองรับ Google Play ยังคงรักษาการเชื่อมต่อกับเซิร์ฟเวอร์อย่างต่อเนื่อง

คำถามของฉันคือทำงานได้อย่างไรโดยไม่ต้องใช้แบตเตอรี่หมด หากเราทำการร้องขอ HTTP อย่างต่อเนื่องตามลำดับการระบายแบตเตอรี่จะมีความสำคัญ การเชื่อมต่อแบบถาวรเหล่านี้มีวิธีการดูแลอย่างไรโดยไม่ประสบปัญหาเดียวกัน


คำถามของคุณเกี่ยวกับซ็อกเก็ตหรือเว็บซ็อกเก็ตหรือไม่? เหล่านี้เป็นสองสิ่งที่แตกต่างกันมาก.
svick

@svick คำถามของฉันเกี่ยวข้องกับซ็อกเก็ต
Vinay S Shenoy

คำตอบ:


23

การเชื่อมต่อ TCP แบบเปิดเป็นสถานะโลจิคัล ไม่ได้หมายความว่าข้อมูลจะถูกส่งไปมาเสมอ หลังจากการจับมือสามทางเริ่มต้นคุณได้เข้าสู่สถานะ "เชื่อมต่อ" แล้ว คุณอยู่ในสถานะนั้นจนกว่าจะมีการตัดการเชื่อมต่อแบบ 3 ทางหรือล้มเหลวแบบ keep-alive

ในช่วงอายุของการเชื่อมต่อทรัพยากรจากสื่อกลาง "ทางกายภาพ" อาจถูกสร้างขึ้นเพื่อทำการถ่ายโอนข้อมูลสำหรับการเชื่อมต่อนั้น ในกรณีของการเชื่อมต่อแบบใช้สายนี่เป็นเรื่องของการถ่ายโอนเฟรมอีเธอร์เน็ตรอบ ๆ ในกรณีของการเชื่อมต่อไร้สาย 3G / 4G จะทำโดยสร้างการเชื่อมต่อกับโปรโตคอลระดับล่างตามที่ต้องการ

ดังนั้นตลอดชีวิตของการเชื่อมต่อไม่มีการเชื่อมต่อข้อมูลพื้นฐานทางกายภาพที่มีอยู่ มันอยู่เฉยๆรอให้เพื่อนทั้งในการเชื่อมต่อ TCP จะต้องส่งข้อมูล

ปัญหาอื่นคือ TCP ใช้แอ๊อ้างอิง ผู้ใช้ TCP สามารถช่วยกันรู้ถึงสิ่งที่ได้รับมาอย่างแน่นอน เมื่อล้มเหลว TCP จะส่งสัญญาณอีกครั้ง วิธีนี้ใช้งานได้ดีสำหรับการเชื่อมโยงทางกายภาพที่เชื่อถือได้ แต่มีแนวโน้มที่จะแยกจากกันในการเชื่อมโยงที่มีเสียงดัง / แตกเช่นการเชื่อมต่อไร้สายของคุณ อย่างที่คุณสามารถจินตนาการได้ acks / retransmissions จะเกิดขึ้นบ่อยมากในสภาพแวดล้อมเหล่านี้

ดังนั้นโดยทั่วไปโปรโตคอลไร้สายจะทำทุกอย่างเท่าที่ทำได้เพื่อลดความจำเป็นในการส่งสัญญาณ TCP อีกครั้ง ตัวอย่างเช่นมีการตรวจสอบข้อผิดพลาดมากมายในเลเยอร์ไร้สาย เพื่อนในดินแดนไร้สาย (สถานีฐาน / โทรศัพท์) ยังใช้โพรโทคอลตามนาคเพื่อบอกอีกด้านเมื่อพวกเขาไม่ได้รับอะไร ถูกนาคตามจะช่วยลดค่าใช้จ่ายในการตรวจสอบข้อผิดพลาด (เราคิดทุกอย่างดียกเว้นในกรณีที่ด้านอื่น ๆ กล่าวไม่ได้) นอกจากนี้ยังช่วยแก้ไขข้อผิดพลาดก่อนหน้านี้มันทำให้เกิดฟองขึ้นไปที่เลเยอร์ TCP - ดังนั้นหลีกเลี่ยง TCP thrashing จำนวนมากที่พยายามส่งใหม่ ยิ่งไปกว่านั้นมันช่วยลดขอบเขตของการส่งสัญญาณซ้ำไปยังผู้ใช้งานแบบไร้สาย - โทรศัพท์ไม่จำเป็นต้องขอเซิร์ฟเวอร์จากที่ไหนสักแห่งบนอินเทอร์เน็ตสำหรับแพ็กเก็ตอีกครั้งเพียงแค่สถานีฐานผ่านลิงก์ไร้สาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.