12-03-2013, 05:30 PM
Argorate > L'AJAX pour le temps réel, ça le fait pas Les requêtes HTTP sont beaucoup trop lentes.
Oui personnellement j'envoie toujours l'ID du joueur (l'id mongodb actuellement, y'aurait moyen de faire plus court et optimisé donc), et une direction (et non des coordonnées). Ainsi je limite les cas de vérification. C'est moins intéressant pour le pathfinding par contre, mais ça me permet mouvement par mouvement de vérifier si le pathfinding est toujours valide (si un mob se déplace sur une case où l'on avait prévu de passer).
Pour un ordre d'idée, j'ai 5ms de ping en moyenne avec Socket.IO et Node en local (sans prédiction donc, avec un serveur dit "autoritaire").
Malheureusement les WS c'est du TCP. Ca pose problème parce que l'on peut perdre un paquet il me semble ?
Sinon pour rejoindre Sephi sur le choix technologique, en 2013, les WS étant de plus en plus adoptés, il peut être intéressant de s'intéresser à autre chose que Node/Socket.IO. J'ai des problèmes de concurrence par exemple que j'ai du mal à gérer par exemple avec Node (exemple je tue un mob, il est supprimé de la map, mais entre deux le tick de l'IA s'est lancé et une action a été demandée alors que le mob n'existe plus levant une erreur). Cependant ça reste une solution très très rapide.
Enfin il faut introduire une dose de prédiction. Alors bien sûr c'est toujours facile d'en parler, mais dès que tu sors d'un canvas blanc avec deux points noirs c'est déjà beaucoup moins simple. Si tu fais une action sur le client, que tu as un conflit avec le serveur, il faut pouvoir rétablir "l'état" de ton jeu. Si ton jeu est pas trop compliqué et basé sur des déplacements ça va. Si tu as des animations, de la physique, que tu as fais une attaque que tu aurais pas du pouvoir faire changeant les caractéristiques d'un autre joueur, bon courage pour rétablir ça.
Citation : Je vois que tu as posté sur le topic de Maks. Je ne sais pas comment il fait, mais je pense qu'il confirmera, en envoyant juste l'ID du joueur et sa nouvelle position, la taille de la requête est légère et donc ça va assez vite pour capter la plupart des points de déplacement.
Oui personnellement j'envoie toujours l'ID du joueur (l'id mongodb actuellement, y'aurait moyen de faire plus court et optimisé donc), et une direction (et non des coordonnées). Ainsi je limite les cas de vérification. C'est moins intéressant pour le pathfinding par contre, mais ça me permet mouvement par mouvement de vérifier si le pathfinding est toujours valide (si un mob se déplace sur une case où l'on avait prévu de passer).
Pour un ordre d'idée, j'ai 5ms de ping en moyenne avec Socket.IO et Node en local (sans prédiction donc, avec un serveur dit "autoritaire").
Citation : N'empêche, développer un petit plugin qui permettrait une connexion UDP ça serait puissant. Faudrait voir combien de personnes seraient prêts à l'installer.
Malheureusement les WS c'est du TCP. Ca pose problème parce que l'on peut perdre un paquet il me semble ?
Sinon pour rejoindre Sephi sur le choix technologique, en 2013, les WS étant de plus en plus adoptés, il peut être intéressant de s'intéresser à autre chose que Node/Socket.IO. J'ai des problèmes de concurrence par exemple que j'ai du mal à gérer par exemple avec Node (exemple je tue un mob, il est supprimé de la map, mais entre deux le tick de l'IA s'est lancé et une action a été demandée alors que le mob n'existe plus levant une erreur). Cependant ça reste une solution très très rapide.
Enfin il faut introduire une dose de prédiction. Alors bien sûr c'est toujours facile d'en parler, mais dès que tu sors d'un canvas blanc avec deux points noirs c'est déjà beaucoup moins simple. Si tu fais une action sur le client, que tu as un conflit avec le serveur, il faut pouvoir rétablir "l'état" de ton jeu. Si ton jeu est pas trop compliqué et basé sur des déplacements ça va. Si tu as des animations, de la physique, que tu as fais une attaque que tu aurais pas du pouvoir faire changeant les caractéristiques d'un autre joueur, bon courage pour rétablir ça.