.state == .connected } } }

การส่งข้อความ

ตอนนี้เราได้เชื่อมต่ออุปกรณ์ทั้งหมดแล้วก็ได้เวลาเริ่มส่งข้อความไปมา MPC เสนอสามทางเลือกในเรื่องนี้:

เพื่อความเรียบง่ายเราจะดูตัวเลือกแรกเท่านั้น เราจะส่งข้อความธรรมดา ๆ กลับไปกลับมาและไม่ต้องกังวลมากเกินไปเกี่ยวกับความซับซ้อนของประเภทข้อความการจัดรูปแบบ ฯลฯ เราจะใช้โครงสร้าง Codable ในการห่อหุ้มข้อความของเราซึ่งจะมีลักษณะดังนี้:

struct Message: Codable { let body: String }

นอกจากนี้เราจะเพิ่มส่วนขยายให้กับอุปกรณ์เพื่อส่งสิ่งเหล่านี้:

extension Device { func send(text: String) throws { let message = Message(body: text) let payload = try JSONEncoder().encode(message) try self.session?.send(payload, toPeers: [self.peerID], with: .reliable) } } ~~~swift Finally, we'll need to modify our `Device.session(_:didReceive:fromPeer)` code to receive the message, parse it, and notify any interested objects about it:

static let messageReceivedNotification = Notification.Name (“ DeviceDidReceiveMessage”) เซสชัน func สาธารณะ (_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {if let message = try? JSONDecoder (). ถอดรหัส (Message.self, from: data) {NotificationCenter.default.post (name: Device.messageReceivedNotification, object: message, userInfo: [“ from”: self])}}

## Disconnections Now that we've got a connection created between multiple devices, we have to be able to both disconnect on demand and also handle system interruptions. One of the undocumented weaknesses of MPC is that it doesn't function in the background. We need to observe the `UIApplication.didEnterBackgroundNotification` notification, and make sure that we shut down all our sessions. Failure to do this will lead to undefined states in the sessions and devices and can cause lots of confusing, hard-to-track-down errors. There is a temptation to use a background task to keep your sessions around, in case the user jumps back into your app. However, this is a bad idea, as MPC will usually fail within the first second of being backgrounded. When your app returns to the foreground, you can rely on MPC's delegate methods to rebuild your connections. In our MPCSession's `start()` method, we'll want to observe this notification and add code to handle it and shut down all our sessions. ~~~swift func start() { self.advertiser.startAdvertisingPeer() self.browser.startBrowsingForPeers() NotificationCenter.default.addObserver(self, selector: #selector(enteredBackground), name: Notification.Name.UIApplicationDidEnterBackground, object: nil) } @objc func enteredBackground() { for device in self.devices { device.disconnect() } } func disconnect() { self.session?.disconnect() self.session = nil }

ข้อสรุป

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

MPC นำเสนอการเชื่อมต่อที่ราบรื่นระหว่างอุปกรณ์ใกล้เคียงโดยไม่ต้องกังวลเกี่ยวกับเครือข่าย WiFi บลูทู ธ หรือยิมนาสติกไคลเอนต์ / เซิร์ฟเวอร์ที่ซับซ้อน ความสามารถในการจับคู่โทรศัพท์สองสามเครื่องอย่างรวดเร็วสำหรับเซสชันการเล่นเกมสั้น ๆ หรือเชื่อมต่ออุปกรณ์สองเครื่องเพื่อใช้งานร่วมกันนั้นทำได้ตามแบบฉบับของ Apple

ซอร์สโค้ดสำหรับโปรเจ็กต์นี้มีอยู่ใน Github ที่ https://github.com/bengottlieb/MultipeerExample .

ออกแบบ iOS ที่ใช้ AFNetworking? รูปแบบการออกแบบ Model-View-Controller (MVC) นั้นยอดเยี่ยมสำหรับ codebase ที่มีการบำรุงรักษา แต่บางครั้งคุณต้องใช้คลาสเดียวเพื่อจัดการระบบเครือข่ายของคุณเนื่องจากข้อกังวลเช่นรหัส DRY การบันทึกเครือข่ายแบบรวมศูนย์และโดยเฉพาะอย่างยิ่งการ จำกัด อัตรา อ่านทั้งหมดเกี่ยวกับการจัดการสิ่งนี้ด้วยคลาส Singleton ใน iOS Centralized and Decoupled Networking: AFNetworking Tutorial พร้อมคลาส Singleton

ทำความเข้าใจพื้นฐาน

แอปพลิเคชันแบบเพียร์ทูเพียร์คืออะไร?

แอปในเครือข่ายที่สามารถเชื่อมต่อกับอินสแตนซ์อื่น ๆ (เพียร์) โดยไม่ต้องใช้เซิร์ฟเวอร์หรือตัวกลางอื่น ๆ

ทำไมการเข้ารหัสจึงจำเป็น?

หากข้อมูลของคุณมีความละเอียดอ่อน (เช่นไฟล์ที่แชร์) คุณอาจต้องการป้องกันไม่ให้ผู้อื่นดักจับข้อมูลได้ อย่างไรก็ตามสำหรับแอปพลิเคชันแบบเพียร์ทูเพียร์จำนวนมากไม่จำเป็นต้องใช้ (คิดว่า: การเคลื่อนไหวของเกมหรือคำแนะนำง่ายๆ)

“ การส่งข้อความ” หมายความว่าอย่างไร

เมื่อเชื่อมต่ออุปกรณ์สองเครื่องจะสื่อสารกันผ่านข้อความที่ส่งไปมา

“ โครงสร้างพื้นฐานเครือข่าย” คืออะไร?

ในเครือข่ายไคลเอนต์เซิร์ฟเวอร์แบบดั้งเดิมโครงสร้างพื้นฐานประกอบด้วยเซิร์ฟเวอร์และอุปกรณ์เชื่อมต่อ (เช่นสถานีฐาน WiFi) ในรูปแบบเพียร์ทูเพียร์สามารถลดขนาดเป็นเครือข่ายที่ประกอบด้วยอุปกรณ์เท่านั้นและการเชื่อมต่อแบบเฉพาะกิจ (ไม่มีฮาร์ดแวร์ภายนอกมีเพียงวิทยุของอุปกรณ์เท่านั้น)

การสื่อสารแบบเพียร์ทูเพียร์คืออะไร?

การสื่อสารแบบเพียร์ทูเพียร์เกี่ยวข้องกับอุปกรณ์บนเครือข่ายที่พูดคุยกันโดยตรงโดยไม่ต้องผ่านเซิร์ฟเวอร์ตัวกลาง

bootstrap ในการออกแบบเว็บคืออะไร

เหตุใด Peer-to-Peer จึงเป็นสิ่งที่ดี?

เครือข่ายเพียร์ทูเพียร์สามารถตั้งค่าได้ทุกที่ที่มีอุปกรณ์ที่มีความสามารถสองเครื่องขึ้นไปโดยไม่ต้องเกี่ยวข้องกับเซิร์ฟเวอร์ที่สามซึ่งอาจไม่สามารถเข้าถึงได้ ตัวอย่างเช่นเมื่อไม่มีการเชื่อมต่อกับอินเทอร์เน็ต แต่อุปกรณ์ต่างๆยังสามารถมองเห็นกันและกันได้

ประโยชน์ของ Multipeer Connectivity framework คืออะไร?

MPC ดูแลงานการตั้งค่าและการบำรุงรักษาที่สำคัญจำนวนมากเช่นการค้นหาเพื่อนและการสื่อสารระดับต่ำ ช่วยให้นักพัฒนาซอฟต์แวร์ประหยัดเวลาและความพยายามได้มากโดยการจัดการฟังก์ชันทั่วไปสำหรับพวกเขา

อะไรคือข้อเสียของเฟรมเวิร์ก Multipeer Connectivity?

มีจุดอ่อนบางประการที่ไม่ได้รับการบันทึกไว้อย่างดีซึ่งหากไม่ได้รับการป้องกันอาจทำให้เกิดปัญหาในการเชื่อมต่อ นอกจากนี้ยังมีการสูญเสียความยืดหยุ่นโดยทั่วไปที่มาพร้อมกับกรอบวัตถุประสงค์ทั่วไป อย่างไรก็ตามสำหรับการใช้งานส่วนใหญ่ MPC นั้นเหมาะสมอย่างยิ่ง