Estoy haciendo un navegador web basado en el juego multijugador. He determinado que los websockets son la mejor forma de manejar las comunicaciones dada su naturaleza en tiempo real. El cliente usa un lienzo HTML5 para renderizar el juego y los websockets para comunicarse con el host.Servidor de juegos PHP, ¿múltiples clientes TCP?
He elegido usar PHP para alojar el juego, ya que parece ser el preferido por los proveedores de hosting. No he usado PHP antes, pero he hecho cosas similares con websockets en Java, pero confiando mucho en multihilo.
He estado viendo algunos tutoriales sobre sockets php con múltiples clientes; pero la mayoría de ellos hace cosas como desviar nuevos procesos para cada cliente. Como tendré un bucle constante en el juego, no creo que sea adecuado.
Lo que estoy tratando de lograr es un medio de asignar puertos a cada cliente mientras se conectan, escuchando nuevos clientes, intercambiando datos con la lista actual de clientes y ejecutando el bucle de juego todos juntos.
Los lugares en los que necesito ayuda son:
- Cómo encontrar y asignar los puertos a los nuevos clientes, notificar al cliente de ese puerto, y limpiarlo cuando se desconectan.
- Cómo hacer lo anterior, y todas las demás transacciones de socket, sin bloquear el bucle del juego. Sería aceptable aceptar mensajes de clientes en fragmentos parciales y solo actuar sobre un mensaje completo.
¿Alguien me puede dar algún consejo técnico sobre cómo lograr estos objetivos? No creo que todo esto parezca demasiado pedir de PHP, pero corrígeme si me equivoco.
Algún pseudocódigo de lo que idealmente me gustaría conseguir en el lado del servidor. Ninguna de las funciones debe bloquear: Clientes de matriz;
while(gamerunning)
{
CheckForNewClients();
GetStatusFromClients();
DoGameUpdate();
SendGameStateToClients();
}
[Actualización] Para todos los interesados, he creado una aplicación dedicada de soporte Web Sockets (específicamente el uso de Java, y la biblioteca de sockets 'TooTallNates' web) en lugar de un servicio web real, ya que parecía tener más sentido, aunque, por cierto, parece que la mayoría de los navegadores web han lanzado sockets web en el contenedor debido a problemas de seguridad.
En caso de que pueda obtener un VPS o algo que le permita ejecutar Node.js en él, le sugiero encarecidamente que tome la ruta del Nodo. Los servidores multijugador en Node.js son pan comido. –
¿No es node.js una solución del lado del cliente para websockets? –
no, nodejs en resumen es muy rápido, eventdriven, javascript en el servidor para escribir servidores. –