2012-08-23 20 views
12

Estoy trabajando con GameKit.framework y estoy tratando de crear una comunicación confiable entre dos iPhones.¿La comunicación de GameKit es confiable con GKMatchSendDataReliable?

Estoy enviando paquetes con el modo GKMatchSendDataReliable.

La documentación dice:

GKMatchSendDataReliable

Los datos se envían de forma continua hasta que es recibido con éxito por los destinatarios o los tiempos de espera de la conexión. Las transmisiones confiables se envían en el orden en que fueron enviadas. Úselo cuando necesite garantizar la entrega.

Disponible en iOS 4.1 y posterior. Declarado en GKMatch.h.

He tenido algunos problemas con una mala conexión WiFi. El GameKit no declara la conexión perdida, pero algunos paquetes nunca llegan.

¿Puedo contar con una comunicación 100% confiable cuando uso GKMatchSendDataReliable o Apple solo está usando nombres elegantes para algo que no implementaron?

+0

Nunca he usado el modo confiable, pero tuve muchos problemas al probar aplicaciones de GC en el simulador. Asegúrate de probar tu aplicación en dos dispositivos. – Adam

Respuesta

1

Mis usuarios también se quejan de que algunos datos pueden perderse accidentalmente durante el juego. Escribí un test app y descubrí que GKMatchSendDataReliable no es realmente confiable. En una conexión a Internet débil (por ejemplo, EDGE) algunos paquetes se pierden regularmente sin ningún error de la API de Game Center.

Por lo tanto, la única opción es agregar una capa de transporte adicional para una entrega verdaderamente confiable.

Escribí una lib simple para este propósito: RoUTP. Guarda todos los mensajes enviados hasta el acuse de recibo de cada uno recibido, reenvía los mensajes perdidos y los almacena en búfer en caso de una secuencia interrumpida. En mi combinación de pruebas "RoUTP + GKMatchSendDataUnreliable" funciona incluso mejor que "RoUTP + GKMatchSendDataReliable" (y por supuesto mejor que GKMatchSendDataReliable puro que no es realmente confiable).

+1

He recopilado evidencia que está de acuerdo con usted. Debo admitir que estoy asombrado por esto, sin mencionar que estoy muy decepcionado con Apple. En serio, ¿su conexión confiable es descaradamente poco confiable? Tengo que agregar una capa de transporte en la parte superior de una capa de juego que se encuentra en la parte superior de varias capas de transporte. A continuación, ¿debemos comenzar a escribir algún control de flujo de hardware en la aplicación? FFS. – theLastNightTrain

0

Es casi 100% confiable, pero tal vez no es lo que necesita a veces ... Por ejemplo, se desconectó de la red todo lo que envía a través de GKMatchSendDataReliable se enviará en el orden en que los envió. Esto es brillante para los juegos por turnos, por ejemplo, pero si es necesaria una reacción rápida, un desertorado de la red no solo olvidaría los paquetes perdidos, sino que obtendría todos los paquetes ahora retrasados ​​hasta que vuelva a funcionar en tiempo real.

El caso GKMatchSendDataReliable no envía los datos es un tiempo de espera de conexión. Creo que este sería también el caso cuando cierras la aplicación

Cuestiones relacionadas