.state == .connected } } }

Sõnumite saatmine

Nüüd, kui kõik meie seadmed on ühendatud, on aeg hakata tegelikult edasi-tagasi sõnumeid saatma. MPC pakub selles osas kolme võimalust:

Lihtsuse huvides vaatleme neist valikutest ainult esimest. Saadame lihtsaid sõnumeid edasi-tagasi ega muretse liiga palju sõnumitüüpide, vormindamise jne keerukuse pärast. Kasutame sõnumi kapseldamiseks kodeeritavat struktuuri, mis näeb välja järgmine:

struct Message: Codable { let body: String }

Lisame seadmesse ka laiendi, et saata üks järgmistest:

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”) avalik funktsiooni seanss (_ seanss: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {if let message = try? JSONDecoder (). Dekodeeri (Message.self, from: data) {NotificationCenter.default.post (nimi: Device.messageReceivedNotification, objekt: sõnum, userInfo: [“from”: ise])}}

sõitmine uber vs lyft 2016 eest
## 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 }

Järeldused

See artikkel käsitleb arhitektuuri, mis on vajalik MultipeerConnectivity-põhise rakenduse võrgukomponentide loomiseks. Täielik lähtekood (saadaval Githubis) pakub minimaalset kasutajaliidese ümbrist, mis võimaldab vaadata ühendatud seadmeid ja nende vahel sõnumeid saata.

MPC pakub peaaegu sujuvat ühenduvust lähedal asuvate seadmete vahel, ilma et peaksite muretsema WiFi-võrkude, Bluetoothi ​​või keeruka kliendi / serveri võimlemise pärast. Võimalus lühikese mänguseansi jaoks paar telefoni kiiresti paaristada või jagamiseks kaks seadet ühendada toimub Apple'i tavapärasel viisil.

Selle projekti lähtekood on saadaval Githubis aadressil https://github.com/bengottlieb/MultipeerExample .

Kas kujundate iOS-i, mis kasutab AFNetworkingut? MVC (Model-View-Controller) kujundusmuster sobib suurepäraselt hooldatava koodibaasi jaoks, kuid mõnikord vajate oma võrgu haldamiseks ühte klassi, näiteks DRY-koodi, tsentraliseeritud võrgulogimise ja eriti kiiruse piiramise tõttu. Lugege kõike selle kohta, kuidas seda Singletoni klassiga käsitleda iOS-i tsentraliseeritud ja sidumata võrgundus: AF-võrguõpetus Singletoni klassiga

Põhitõdede mõistmine

Mis on peer-to-peer rakendus?

Võrku ühendatud rakendus, mis on võimeline ühenduse loomiseks teiste eksemplaridega (eakaaslastega), vajamata serverit või muud vahendajat.

Miks on krüpteerimine vajalik?

Kui teie andmed on tundlikud (näiteks jagatud failid), võiksite takistada teistel neid pealtkuulamast. Paljude peer-to-peer rakenduste jaoks pole see aga vajalik (mõelge: mängu liigutused või lihtsad juhised).

Mida mõeldakse sõnumi edastamise all?

Kui kaks seadet on ühendatud, suhtlevad nad edasi-tagasi saadetud sõnumite kaudu.

Mis on võrguinfrastruktuur?

Traditsioonilises kliendi-serveri võrgus hõlmab infrastruktuur serverit ja ühendusseadmeid (nt WiFi tugijaam). Peer-to-peer-mudelis saab selle taandada võrguks, mis koosneb ainult seadmetest endast ja ad-hoc-ühendusest (pole välist riistvara, ainult seadmete enda raadiod).

Mis on peer-to-peer suhtlus?

Peer-to-peer suhtlus hõlmab võrgus olevaid seadmeid, mis räägivad otse üksteisega, ilma vahendusserverit läbimata.

Miks on peer-to-peer hea?

Peer-to-peer võrke saab luua kõikjal, kus on kaks või enam võimekat seadet, ilma et peaks kaasama kolmandat, potentsiaalselt kättesaamatut serverit. Näiteks kui Interneti-ühendust pole, kuid seadmed näevad siiski üksteist.

Mis on Multipeer Connectivity raamistiku eelised?

MPC hoolitseb paljude põhiliste seadistamis- ja hooldustoimingute eest, nagu vastastikune avastamine ja madalama taseme suhtlus. See säästab arendajat palju aega ja vaeva, töötades nende jaoks ühiste funktsioonidega.

Millised on Multipeer Connectivity raamistiku varjuküljed?

On mõned üksikud hästi dokumenteerimata nõrgad kohad, mis võivad ühenduse tekkimisel tekitada probleeme, kui neid ei kaitsta. Samuti kaob üldine paindlikkus, mis kaasneb üldotstarbelise raamistikuga. Enamiku kasutusviiside jaoks sobib MPC siiski hästi.