Javascript et PHP pour le multijoueur en temps réel? [fermé]

13

Je me demande si la combinaison du côté client Javascript avec le côté serveur PHP / mysql est une bonne idée pour les jeux de navigateur multijoueurs en temps réel HTML5 (à petite échelle)?

Mes connaissances techniques sont très limitées et même si je prévois d'apprendre learn node.js à l'avenir, la courbe d'apprentissage est plutôt énorme en ce moment.

Comme je connais déjà PHP, je pense que je le ferais fonctionner beaucoup plus rapidement.

L'échelle que je pense est de 2 à 8 joueurs à l'époque. Et en essayant de garder le nombre de messages du client au serveur aussi bas que possible.

Les valeurs que j'ai l'intention de stocker / gérer sont les suivantes:

  • Nom et ID du joueur.
  • Position X et Y.
  • Santé.
  • Objets équipés (8 emplacements maximum, probablement moins).
  • Actions (marcher, attaquer, utiliser etc. mais seulement 1 action / joueur à la fois).
  • Puce X, coordonnées Y et trajectoire.
  • Nom de guilde / clan.
  • Et une fonction de chat / mailing de base.

Je suppose que même si ce n'est pas la meilleure solution, mais tant que je garde la logique petite, c'est complètement faisable. Ai-je raison?

justanotherhobbyist
la source
4
Cela semble parfaitement faisable. Pourquoi ne l'essayez-vous pas? Le pire des cas, vous passez un peu de temps à apprendre, dans le meilleur des cas, vous obtenez exactement ce que vous voulez.
William Mariager
1
Oui, mais j'imagine que cela prendrait du temps à créer, et je n'aime pas perdre de temps, c'est pourquoi j'ai demandé ici. =)
justanotherhobbyist
8
Si vous apprenez quelque chose, le temps n'a pas été perdu. ;) Quelque chose à considérer est que si vous changez de langue, vous passerez du temps à apprendre la nouvelle langue et à apprendre le réseautage en même temps, ce qui signifie beaucoup plus de débogage pour trouver où vous vous êtes trompé. Si vous vous en tenez à ce que vous savez, vous apprendrez d'abord le réseautage, puis vous pourrez le porter s'il s'avère inefficace, et la prochaine fois que quelqu'un posera une question similaire, vous connaîtrez la bonne réponse parce que vous l'avez testée.
William Mariager
1
C'est en fait un bon point
justanotherhobbyist

Réponses:

12

Pour un jeu en temps réel, vous voulez minimiser la latence. Voici deux conseils pour y parvenir, avec des notes sur PHP et Node:

  1. Utilisez WebSockets. Ils permettent une communication bidirectionnelle rapide entre le serveur et le client. L'utilisation de node.js ici présente l'avantage que vous pouvez utiliser la même API JavaScript aux deux extrémités du canal. Il y a aussi le merveilleux module socket.io pour node.js qui fournit des technologies de secours aux petits navigateurs qui ne prennent pas en charge les WebSockets. Googler un peu, il semble que vous pouvez également utiliser WebSockets de PHP si vous le souhaitez vraiment.
  2. N'impliquez pas la base de données dans des données temporelles telles que les coordonnées d'objets se déplaçant rapidement. Cela signifie les garder en mémoire, ce qui n'est pas particulièrement bien adapté au modèle d'utilisation PHP traditionnel qui consiste à le faire déclencher une fois pour chaque demande d'apache (ou n'importe quel serveur Web), mais vous pouvez également lancer votre application serveur PHP de manière autonome. Je suppose que Node, avec son noyau V8, sera cependant plus rapide que PHP . Que ce soit un problème dépend de la complexité de votre jeu et de la puissance du serveur.

Je trouve moi-même node.js très facile à prendre en main et comme vous devrez de toute façon coder un peu de JavaScript, je vous recommande de l'essayer. Jetez au moins un coup d'œil aux didacticiels socket.io pour voir à quel point il est simple de configurer un canal de communication en temps réel.

Tapio
la source
+1 pour le point 2. La plus grosse erreur que vous pouvez faire avec cela est de s'attendre à ce que les requêtes MySQL se déclenchent à chaque événement. Tout ce que vous pouvez faire pour déplacer les données du jeu du disque dur va vous aider. J'ai réussi à abuser de Memcached pour cela. Il existe sans aucun doute d'autres moyens.
DampeS8N
Oui, je veux vraiment apprendre le nœud, mais je n'ai pas encore réussi à le démarrer à partir de cmd, la plus grande erreur que les développeurs ont commise a été de compliquer les choses. Au moins maintenant, la version Windows est livrée avec un programme d'installation, peut-être essayer si je trouve un bon tutoriel.
justanotherhobbyist
Le nœud n'est pas du tout difficile à démarrer ou à utiliser. Oui, plus difficile que PHP, mais PHP paie un prix terrible pour sa commodité - la conception qui permet de l'intégrer dans Apache et par défaut partout sans configuration provoque également beaucoup de problèmes qui font de PHP complètement et absolument le pire choix que vous peut faire un backend de jeu en temps réel. Node, Python, Ruby, Java, etc. nécessitent tous que vous configuriez le serveur d'application, mais ce modèle même permet un traitement en mémoire événementiel hautement évolutif qui est littéralement impossible à réaliser en PHP.
Sean Middleditch
1

Parallèlement à la réponse de Tapio, je voudrais suggérer d'envoyer (si possible) uniquement des entrées utilisateur (clics et saisie au clavier) au serveur, et que le serveur et le client émulent le jeu. Tous les N ticks, le client demanderait au serveur une synchronisation, et le serveur répondra avec toutes les informations dont le client a besoin pour rendre le jeu telles que la santé, les objets, etc. C'est pour s'assurer que le client ne se désynchronise pas trop beaucoup.

Bien sûr, le serveur et le client devront avoir exactement la même implémentation du jeu, donc cela pourrait être un peu plus de travail. Si vous disposez d'implémentations parfaites sur le client et le serveur, le client devra se synchroniser moins souvent.

Cela réduira la messagerie client / serveur et réduira la latence. Cela aiderait également à prévenir la tricherie.

En supposant que vous créez ce jeu en JavaScript, il pourrait être utile d'écrire le back-end en JavaScript également, en utilisant NodeJS. De cette façon, vous pouvez réutiliser l'implémentation JavaScript de votre jeu pour le serveur et le client.

art0rz
la source
0

Je recommande d'apprendre Nodejs. Si vous avez déjà Javascript, ce ne sera pas si difficile. J'ai fait un jeu multijoueur TRON rapidement avec Nodejs, et c'était mon premier jour à l'utiliser. (Oh, et le client était un canevas HTML5; je n'envoyais que des entrées clés, comme mentionné dans les autres commentaires.)

Jetez un oeil à un module appelé nowjs. Bonne chance!

David Da Silva Contín
la source