2017-06-23 2 views
0

// ---------- BACKSTORY -------- //Les clients se reconnectent en même temps lors du rechargement du serveur. Besoin de séparer leurs connexions pour attribuer les bons numéros de joueur à chacun

Donc je travaille sur un jeu de pong avec mon ami. Nous avons construit le jeu pour travailler côté client, mais après avoir appris quelque backend nous avons passé le week-end à le convertir pour exécuter côté serveur et émettre des données d'objet pour les clients à dessiner côté client.

Il est actuellement structuré pour recevoir les demandes des clients pour l'attribution de «joueur». Quand 2 joueurs ont été assignés le jeu commencera (côté de serveur) et commencera alors à émettre des données d'objet aux clients.

Tout fonctionne correctement la première fois que les utilisateurs se connectent, mais voici le problème. Quand je fais un changement côté serveur, le serveur se réinitialise (en utilisant nodemon mais ce n'est pas pertinent). Lorsque le serveur réinitialise les deux clients, essayez immédiatement de vous reconnecter et, lorsqu'ils le font, ils sont tous les deux affectés en tant que joueur 1 et par conséquent le jeu se bloque jusqu'à ce qu'ils rafraîchissent leurs pages.

Le code utilisé pour travailler où les modifications du serveur peuvent être poussées à la volée et après une brève pause (lors de la reconnexion) les clients continueront d'afficher les nouvelles modifications. C'était génial pour quand nous étions en train de tester. Maintenant, je dois réinitialiser le serveur (automatisé par nodemon) puis actualiser manuellement chaque client.

// ------ -------- QUESTION //

Ma question est de savoir comment puis-je autoriser les clients à se reconnecter sans les deux étant attribués en tant que joueur 1 (et plus important encore avoir le serveur reconnaît seulement le nombre de joueurs comme 1 et ne réinitialise donc pas le jeu)?

J'ai essayé de mettre des délais (setTimeout) sur l'assignation des joueurs mais je me suis vite rendu compte à quel point c'était futile. Tout retard est connu par les deux clients lors de la reconnexion dans le même laps de temps, peu importe qu'ils se reconnectent instantanément ou les deux à un certain moment dans le futur.

Voici les liens vers les fichiers de branche concernés:

ReadMe: Ceci est un fait que je writeup qui dicte les étapes et les interactions entre le serveur et le client. Ceci est de la même manière que le code est structuré

App.js: fichier serveur où les interactions initiales entre client/serveur lieu

ServerMain.js: c'est le fichier du serveur principal. Il est utilisé dans app.js comme 'Principal'. Le jeu est exécuté/émis à partir de ce fichier

ClientMain.js: il s'agit du fichier client principal servi à chaque client connecté. contient toutes les interactions avec le serveur

Répondre

0

L'acte d'écrire ceci m'a conduit à essayer quelque chose. Si vous remarquez dans app.js et clientmain.js il y a une interaction entre requestPlayer et assignPlayer (émet/listeners). Ils ont été réglés pour écouter une fois (en utilisant la méthode socket .once). Pour cette raison, le serveur .once était réinitialisé (lors de la réinitialisation du serveur) mais le client n'était pas à moins que la page ne soit rafraîchie. Au final, je ne pense pas que l'interaction requestPlayer soit même nécessaire. Je l'ai enlevé et ça marche très bien.