Jeu de baston multijoueur pour Mobile

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par zugsoft » 02 Juil 2016 01:52

J'ai terminé toutes mes optimisations sur les joueurs.
Sur mon Android, je suis maintenant à 60img/s avec 200 joueurs, 42img/s avec 300 joueurs, 31img/s avec 400 joueurs.
Initialement j'avais 25img/s avec 150 joueurs et sans la barre de vie.

J'ai rajouté 4 animations, le saut.

J'ai avancé sur le serveur, mais ca ne tient pas la charge, j'ai tout reécris, mais ca bloque toujours meme avec un petit nombre de joueur, je suis en train de configurer le kernel réseau.
Moon RTS

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par zugsoft » 02 Juil 2016 09:28

Apres avoir passé de nombreuses heures à chercher comment améliorer les performances du serveur, j'ai enfin quelque chose qui va pas trop mal

Serveur Debian :

ulimit -n 100000

Dans fichier etc/sysctl.conf
net.ipv4.udp_rmem_min = 131072
net.ipv4.udp_wmem_min = 131072
net.core.netdev_max_backlog=2000
net.core.rmem_max=67108864
net.core.wmem_max=67109964
net.core.somaxconn = 4096
net.core.rmem_default=65536
net.core.wmem_default=65536

Dans /proc/sys/nr_open
Mettre 1048576

Ensuite j'ai recréé un serveur qui utilise un Pool de 10 Threads pour traiter les paquets UDP, ca va beaucoup mieux, mais ca bloque toujours trop vite à mon gout.
Du coup je suis en train de faire un serveur qui écoute sur 100 ports sur 100Threads, ca devrait etre parfait.
Moon RTS

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: Jeu de baston multijoueur pour Mobile

Message par NDrew » 02 Juil 2016 19:56

en quoi passer de 10 a 100 thread aiderait? ca augmente le nombre de changement de context non? mais ca fait rien de plus en terme de parallelisation?

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par zugsoft » 02 Juil 2016 20:55

C'est bon, le code du serveur tient la charge, maintenant c'est toujours un problème pour le bencher à fond, car c'est mon réseau internet à mon domicile et de mes serveurs client qui ne suit plus.

J'ai simulé 100 clients sur mes serveurs dédiés du Brésil, France, Taiwan qui envoient des faux joueurs sur le petit serveur Russe, tout fonctionne correctement, donc aucun soucis avec les autres serveurs.

Mon plus petit serveur : Russie
Type : VPS
RAM : 512Mo
CPU : 1 vCPU

Le plus gros serveur : France
Type : Physique
RAM : 16Go
CPU : Xeon 4 cores


NDrew a écrit :en quoi passer de 10 a 100 thread aiderait? ca augmente le nombre de changement de context non? mais ca fait rien de plus en terme de parallelisation?
Sur tous mes autres jeux en réseau j'utilise un seul Thread par jeu qui réceptionne les paquets UDP et qui rèpond.
Pour ce jeu, vu le nombre important de joueur que j'aimerai atteindre j'ai fais plusieurs tests durant 2 jours et surtout des nuits :hehe:

1 process Java pour gérer les 100 clients :
Ca fonctionne bien pour 10 joueurs , mais au delà les clients reçoivent trop souvent des timeout, et ce font déconnecter

1 process Java qui réceptionne les paquets, avec un Thread de traitement et qui envoie les paquets:
C'est un poil mieux, des paquets UDP ne sont pas renvoyé assez rapidement

1 process Java qui réceptionne les paquets, avec un pool de 10 Threads pour le traitement + envoie des paquets:
Ca va encore mieux, mais encore trop de timeout sur mes clients

1 process Java qui lance 10 Threads écoutant chacun sur un port différent, avec pour chaque Thread, un pool de 10 Threads:
Plus aucun soucis de timeout sur mes clients, mais difficile de faire un bench avec plus de client, car c'est du coté de mes serveurs qui simulent les clients que ca ne suit plus.

Probleme avec Socket Unity:
Par contre, j'ai de trés gros doute sur les capacités des Socket UDP sous Unity, j'aimerai bien vos avis.
Je peux sans problème laisser tourner un Client UDP en Java sur mon ordi durant des heures je n'ai aucun probleme, 100% des paquets envoyés sont bien traité et je recois une réponse du serveur sur mon client.

Sous Unity, ca fonctionne environ 2minutes, puis je commence a perdre des paquets, puis finalement plus aucun paquet ne sont envoyé, puis apres quelques minutes, 5% des paquets sont bien envoyés, mais impossible de revenir a 100% sans arréter le programme Unity quelques minutes, ca me coupe meme mes connexions SSH sur mon serveur, comme si ma carte réseau n'en pouvait plus.

Edit:J'ai solutionné mon problème, c'était un problème sur mon code, c'est corrigé.
J'en ai profité pour changer le port du serveur si celui en cours d'utilisation ne répond plus.

https://youtu.be/UY_Na0dXxO0

Nouvelle version disponible si vous voulez tester par vous meme
http://zugsoft.com/games/xfighter/FightPC.zip
http://www.zugsoft.com/games/xfighter/fight.apk
Moon RTS

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par zugsoft » 04 Juil 2016 09:34

Weekend assez dure
J'ai essayé de pousser le nombre de joueur au maximum, j'ai été confronté à d'autres problemes rapidement sur le petit serveur Russe avec un seul CPU virtuel.
Ca fonctionnait très bien avec 100 joueurs, mais impossible de dépasser le 120 joueurs (CPU proche des 100%), ce qui faisant dans les 2000 demades à traiter par secondes.
Après un grand nombre d'optimisation j'ai réussi à faire descendre la charge a 30%.

J'ai donc augmenter le nombre de client à 200, mais maintenant j'ai un soucis de bande passante(100Mb/s)
Je vais devoir mettre en place mon systeme de compactage sur mes clients et serveur ce qui va demander de la puissance CPU.
Moon RTS

Avatar de l’utilisateur
Alesk
Messages : 2302
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par Alesk » 04 Juil 2016 09:36

C'est génial ce projet ! Bravo ! :)

Il se peut que je vienne te poser des questions sur le code réseau d'ici quelques temps. :mrgreen:

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par zugsoft » 04 Juil 2016 11:08

Salut,

C'est loin d'etre terminé, pour le moment j'envoie la position de tous les joueurs à tous les joueurs 17 fois par secondes depuis mon serveur, il y a moyen de faire beaucoup mieux en envoyant que la position de tous les joueurs pour la 1er connexion d'un nouveau client, puis envoyer que le delta(uniquement les joueurs qui bougent par exemple)

Le top serait avec ce type de technique :
http://gafferongames.com/networked-phys ... simulation

Il passe de 17Mbits/s à 300Kbits/s , avec ca technique de compression+d'état.
Mais il s'agit dans son cas d'un client avec 900 cubes vers un autre client, si je veux mettre en place cette technique, je vais devoir calculer la physique sur le server ou utiliser un serveur Unity sur mon serveur Linux, mais je ne sais pas si ca consomme beaucoup.
Moon RTS

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: Jeu de baston multijoueur pour Mobile

Message par NDrew » 04 Juil 2016 13:59

L'autre solution si tu te retrouve coincé c'est de faire l'inverse et d'utiliser un moteur physique que tu choisi dans unity et d'implémenter le même pour unity et ton serveur.

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Jeu de baston multijoueur pour Mobile

Message par zugsoft » 04 Juil 2016 15:25

Je suis en train de compiler une version pour Linux pour voir si ca ne consomme pas trop de CPU et RAM, si ca fonctionne bien, ca permettrait d'avoir bien plus de réalisme dans mon jeu, les personnages pourront faire bouger des objets pour les faire tomber sur les autres joueurs :hehe: .


NDrew, ca me parait compliqué ta solution, implémenter un moteur de physique différent de Physx3.3 qui est déjà intégré dans Unity ? Il y aurait quoi de mieux ?
Moon RTS

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: Jeu de baston multijoueur pour Mobile

Message par NDrew » 04 Juil 2016 16:31

désolé j'ai utilisé un mauvais terme, j'aurais pas du dire implémenter, mais intégrer :)

Tu peux intégrer le nouveau physx si tu veux dans unity(ou ODE ou je ne sais quel autre), en gros c'est assez simple, tu as un manager qui update ce moteur dans un fixedUpdate et apres faut faire les représentation physiques des objets(les colliders). Mais bon c'est un travail que tu fais que si tu n'as pas une autre solution qui marche :)

Répondre

Revenir vers « Vos créations, jeux, démos... »