Il modo più efficace per fare networking su Mac / iPhone?

Quale sarebbe il modo più efficace (ovvero il miglior rapporto tra sforzo, leggibilità e manutenibilità) per stabilire una connessione TCP o inviare datagrammi UDP su Mac e iPhone? Ho molta familiarità con i classici socket BSD, ma non sto puntando alla portabilità in questo momento; Sto solo cercando di essere rapidamente fatto con un piccolo progetto.

Mi piacerebbe avere un wrapper Objective-C fornito da Apple, ma mi piacerebbe sentire alcune riflessioni su ciò che le persone fanno comunemente. Se pensate che le prese BSD siano la strada da percorrere, sentitevi liberi di dare un pugno in alcuni pensieri: sono davvero solo interessato a trovare la “strada giusta” per farlo.

Supponiamo che il protocollo sia personalizzato, quindi le nostre esigenze non possono essere soddisfatte dalle classi client HTTP basate su Cocoa 🙂


Il mio objective attuale è quello di trasmettere lo stato del dispositivo (ad es. Accelerometro) sulla rete tramite UDP, mantenendo anche la connessione e il segnale di trasmissione garantita (ad es. Pulsante premuto) su TCP. Un’applicazione desktop mostrerebbe questo stato.

Tuttavia, la mia domanda corrente è proprio ciò che mi ha fatto porre la domanda; Mi chiedo cosa facciano le persone in generale. Quando ho lavorato duramente con VB6 circa 7-8 anni fa, il controllo ActiveX di WinSock ha fatto cose un po ‘diverse da quello che viene fatto con i socket BSD, indipendentemente da ciò che ha fatto sotto il cofano.

Per il networking, la risposta semplice è,

(1) ASIHttpRequest …….. NOTA : questo QA è molto vecchio. Sfortunatamente ASIHttpRequest è di interesse storico e non è più disponibile.

(2) AsyncSocket

(3) Quando stai iniziando … GameKit (un bambino può usarlo)

(4) Basta usare Bonjour (due linee di codice) per trovare altri dispositivi.

“un wrapper Objective-C fornito da Apple” … AsyncSockets (scritto originariamente dal misterioso Dustin J. Voss) è COSÌ BUONO che Apple non si preoccuperà di scriverne uno !

AsyncSockets è esattamente quello che stai cercando. È usato ovunque nelle 300.000 app iFone. “È” in rete su iFone. Spero che sia d’aiuto.

NOTA DI NUOVO : questo QA è molto vecchio. Ora puoi facilmente trovare “versioni moderne di” software come AsyncSockets.

A proposito, non vale niente che non ci sia assolutamente nulla di sbagliato – a tutti – semplicemente usando GK .. le prestazioni possono essere spettacolari. L’unico lato negativo è che l’accoppiamento richiede semplicemente un lungo periodo di tempo con GK. Ed è un disastro infantile creato per i bambini di dieci anni che stanno imparando la programmazione. Sarai in grado di eseguire l’accoppiamento 100 volte più veloce lavorando direttamente con AsyncSockets.

Potresti preferire usare un codice GK giocattolo, mentre scopri Bonjour e tutto il resto.

Suggerirei il consenso di opinione è che non ha senso lavorare ad un livello ancora più basso (es. Socket grezzi) rispetto ad AsyncSocket .. non ci sono molte più prestazioni da avere lì.

NOTA: se sei nuovo su gamekit / iOS, assicurati di leggere questo suggerimento critico!
GKSessioni client / server

spero che sia d’aiuto.

Alla tua domanda non si può rispondere con alcun dettaglio perché non hai descritto cosa vuoi fare. La migliore risposta che posso dare è leggere le guide introduttive di networking per Mac e iOS .

Aggiornare

Non penso che ci sia un “modo Cocoa facile” integrato per UDP. Ricordo che questa discussione è comparsa più volte nella lista dei cocoa-dev. Il progetto cocoaynsocket è stato menzionato in vari luoghi. Afferma:

AsyncUdpSocket è una libreria di rete socket UDP / IP che avvolge CFSocket. Funziona quasi esattamente come la versione TCP, ma è progettato specificamente per UDP. Ciò include operazioni di invio / ricezione in coda non bloccanti, supporto completo dei delegati, class autonoma basata sul ciclo di esecuzione e supporto per IPv4 e IPv6.