Je crée un jeu multijoueur basé sur un navigateur Web. J'ai déterminé que les websockets sont la meilleure façon de gérer les communications étant donné sa nature en temps réel. Le client utilise un canevas HTML5 pour rendre le jeu et les websockets pour communiquer avec l'hôte.Serveur de jeu PHP, plusieurs clients TCP?
J'ai choisi d'utiliser PHP pour héberger le jeu car il semble être préféré par les hébergeurs. Je n'ai pas utilisé PHP auparavant mais j'ai fait des choses similaires avec des websockets en Java, mais en me basant fortement sur le multithreading.
J'ai regardé quelques tutoriels sur les sockets php avec plusieurs clients; mais la plupart d'entre eux font des choses comme bifurquer de nouveaux processus pour chaque client. Puisque je vais avoir une boucle de jeu en cours d'exécution, je ne pense pas que ce soit approprié. Ce que j'essaye de réaliser est un moyen d'assigner des ports à chaque client pendant qu'ils se relient, en écoutant de nouveaux clients, en échangeant des données avec la liste courante de clients et en exécutant la boucle de jeu tous ensemble.
Les endroits où je besoin d'aide sont:
- Comment trouver et affecter des ports à de nouveaux clients, informer le client de ce port, et le nettoyer quand ils se déconnectent.
- Comment faire ci-dessus, et toutes les autres transactions de socket, sans bloquer la boucle de jeu. Il serait acceptable d'accepter des messages de clients en morceaux partiels et d'agir uniquement sur un message complet. Quelqu'un peut-il me donner des conseils techniques sur la façon d'atteindre ces objectifs?
Je ne pense pas que tout cela ressemble trop à demander à PHP mais corrigez-moi si je me trompe!
Un pseudo-code de ce que j'aimerais idéalement réaliser côté serveur. Aucune des fonctions ne doit bloquer: Clients de tableau;
while(gamerunning)
{
CheckForNewClients();
GetStatusFromClients();
DoGameUpdate();
SendGameStateToClients();
}
[Mise à jour] Pour toute personne intéressée, je créé une application dédiée supportant les sockets Web (en particulier en utilisant Java et la bibliothèque socket web « TooTallNates ») plutôt que d'un service Web réel car il semblait plus logique, Bien que, incidemment, il semble que la plupart des navigateurs Web ont jeté des sockets Web à la poubelle en raison de problèmes de sécurité.
Dans le cas où vous pouvez obtenir un VPS ou quelque chose qui vous permet d'exécuter Node.js dessus, je suggère fortement de prendre le chemin du nœud. Les serveurs multijoueurs dans Node.js sont un jeu d'enfant. –
node.js n'est-il pas une solution côté client pour les websockets? –
non, nodejs en bref est flamboyant rapide, eventdriven, serveur javascript pour les serveurs d'écriture. –