2012-08-23 7 views
12

Sto lavorando con GameKit.framework e sto cercando di creare una comunicazione affidabile tra due iPhone.La comunicazione di GameKit è affidabile con GKMatchSendDataReliable?

Invio pacchetti con la modalità GKMatchSendDataReliable.

La documentazione dice:

GKMatchSendDataReliable

I dati vengono inviati in modo continuo fino a quando non viene ricevuto con successo dai destinatari o la connessione è scaduta. Le trasmissioni affidabili vengono consegnate nell'ordine in cui sono state inviate. Usalo quando devi garantire la consegna.

Disponibile in iOS 4.1 e versioni successive. Dichiarato in GKMatch.h.

Ho riscontrato alcuni problemi su una connessione WiFi negativa. Lo GameKit non dichiara la connessione persa, ma alcuni pacchetti non arrivano mai.

Posso contare su una comunicazione affidabile al 100% quando si utilizza GKMatchSendDataReliable o Apple sta usando solo nomi di fantasia per qualcosa che non hanno implementato?

+0

Non ho mai utilizzato la modalità affidabile, ma ho riscontrato molti problemi durante il test delle app GC sul simulatore. Assicurati di testare la tua app su due dispositivi. – Adam

risposta

1

I miei utenti si lamentano anche del fatto che alcuni dati potrebbero essere persi accidentalmente durante il gioco. Ho scritto un test app e ho capito che GKMatchSendDataReliable non è veramente affidabile. Con una connessione internet debole (ad es. EDGE) alcuni pacchetti vengono regolarmente persi senza alcun errore dall'API di Game Center.

Quindi l'unica opzione è aggiungere un ulteriore livello di trasporto per una consegna veramente affidabile.

Ho scritto una semplice libreria per questo scopo: RoUTP. Salva tutti i messaggi inviati fino al riconoscimento per ogni ricevuto, rinvia i messaggi persi e i buffer ricevuti in caso di sequenza interrotta. Nella mia combinazione di test "RoUTP + GKMatchSendDataUnreliable" funziona anche meglio di "RoUTP + GKMatchSendDataReliable" (e ovviamente meglio del puro GKMatchSendDataReliable che non è realmente affidabile).

+1

Ho raccolto prove che sono d'accordo con te. Devo ammettere di essere stupito da questo, per non dire molto deluso da Apple. Voglio dire sul serio, la loro connessione affidabile è sfacciatamente inaffidabile? Devo aggiungere un livello di trasporto sopra un livello di gioco che si trova in cima a più livelli di trasporto? In seguito, dovremmo iniziare a scrivere un controllo del flusso hardware nell'app? FFS. – theLastNightTrain

0

È affidabile quasi al 100% ma forse non è quello che ti serve a volte ... Ad esempio, hai abbandonato la rete tutte le cose che invii tramite GKMatchSendDataReliable verranno inviate nell'ordine in cui le hai inviate. Questo è brillante per i giochi a turni, ad esempio, ma se è necessaria una reazione rapida, un dropout della rete non dimenticherà solo i pacchetti persi, ma otterrebbe tutti i pacchetti ormai in ritardo fino a quando non tornerà in tempo reale.

Il caso GKMatchSendDataReliable non invia i dati è un timeout di connessione. Penso che sarebbe anche il caso quando chiudi l'app

Problemi correlati