Actualmente estoy desarrollando un juego multijugador en tiempo real, y he estado evaluando varias soluciones de alojamiento basadas en la nube. No estoy seguro de si App Engine se ajusta a mis necesidades y agradecería cualquier comentario.¿Es viable un juego multijugador en tiempo real usando Google App Engine?
En esencia, quiero que el sistema funcione así: el jugador A calcula la ronda n, y genera un hash fuera del estado del juego al final de esa ronda. A continuación, envía sus comandos para esa ronda y el hash, como http POST al servidor. El jugador B hace lo mismo, en paralelo.
El servidor, al manejar el POST de un reproductor, primero escribe el código hash recibido en el Memcache. Si el hash del otro jugador aún no se encuentra en el Memcache, espera y revisa periódicamente el Memcache para el hash de los otros jugadores. Tan pronto como los dos hashes están en la memcache, los compara por igualdad. Si son iguales, el servidor envía los comandos de cada jugador al respectivo otro como la respuesta http.
Una ronda como esa debería durar alrededor de medio segundo, lo que significa dos solicitudes por jugador por segundo.
Por supuesto, esta forma de hacerlo solo funcionará si hay al menos dos instancias de la aplicación ejecutándose, ya que dos solicitudes deben tratarse en paralelo. Además, la memoria caché debe ser coherente en todas las instancias, ser bastante confiable y actualizar de inmediato.
no puedo usar XMPP porque quiero que mi juego sea capaz de funcionar dentro de las redes restringidas, por lo que tiene que limitarse a HTTP en el puerto 80.
¿Hay una manera de hacer cumplir que dos instancias de la aplicación siempre están corriendo? ¿Hay fallas evidentemente obvias en mi diseño? ¿Crees que una arquitectura como esta podría funcionar en App Engine? Si no, ¿qué solución basada en la nube sugeriría?
¡Muchas gracias por señalar Channel API! Al usarlo, ni siquiera necesito tener dos instancias ejecutándose a la vez. Soluciona mi problema por completo. –