Jeu de baston multijoueur pour Mobile
Re: Jeu de baston multijoueur pour Mobile
Je pensais galerer quelques heures pour arriver a faire fonctionner un simple projet sur mon serveur Linux, mais il suffit de 2minutes , meme pas besoin de faire le build depuis Linux, tout se fait directement sous Windows, il y a juste a envoyer le repertoire sur le serveur Linux , passer le ficher en executable avec chmod, et ca fonctionne
Je n'aurai jamais fait mes serveur en Java ou en C en connaissant la facilité de compilation de d'installation sur du Linux, et de plus je vais pouvoir utiliser Physx3.3 sur mes serveurs
Niveau memoire ca consomme moins qu'une JVM, je vais commencer par fair un simple serveur udp dans un seul Thread pour voir de quoi il est capable, et si il n'y a pas trop de memory leak, car il y a souvent des bugs chez Unity a ce sujet.
Je n'aurai jamais fait mes serveur en Java ou en C en connaissant la facilité de compilation de d'installation sur du Linux, et de plus je vais pouvoir utiliser Physx3.3 sur mes serveurs
Niveau memoire ca consomme moins qu'une JVM, je vais commencer par fair un simple serveur udp dans un seul Thread pour voir de quoi il est capable, et si il n'y a pas trop de memory leak, car il y a souvent des bugs chez Unity a ce sujet.
Moon RTS
Re: Jeu de baston multijoueur pour Mobile
Le serveur développé en C# sous Unity à l'identique de celui en Java fonctionne très bien sous Linux, vraiment content de Unity.
Niveau consommation mémoire je suis 42Mo de RAM, et niveau CPU par contre je suis 2x fois plus haut qu'en Java
Ce qui consomme quasi toute la puissance du CPU c'est de jouer avec les string, j'utilise pourtant StringBuilder que j'ai mesuré 100fois plus rapide que les + et concat, mais c'est toujours beaucoup trop consommateur.
Maintenant que Client et Serveur sont programmés en C# sous Unity, je vais utiliser directement des objets serialisés , je devrais passé de 4500Bytes pour 100 joueurs à environ 3000Bytes, de quoi monter a 300 joueurs par serveur.
Niveau consommation mémoire je suis 42Mo de RAM, et niveau CPU par contre je suis 2x fois plus haut qu'en Java
Ce qui consomme quasi toute la puissance du CPU c'est de jouer avec les string, j'utilise pourtant StringBuilder que j'ai mesuré 100fois plus rapide que les + et concat, mais c'est toujours beaucoup trop consommateur.
Maintenant que Client et Serveur sont programmés en C# sous Unity, je vais utiliser directement des objets serialisés , je devrais passé de 4500Bytes pour 100 joueurs à environ 3000Bytes, de quoi monter a 300 joueurs par serveur.
Moon RTS
Re: Jeu de baston multijoueur pour Mobile
Merci pour les retours. C'est très instructif.
Cela valide (pour moi) le choix de VPSs sous Linux au lieu de Windows. Moins chers...
Pour la consommation du CPU, une "pause" dans ta boucle d'Update principale même d'une milliseconde (genre "Thread.Sleep") peut solutionner le souci. C'est une astuce que j'utilise ailleurs qu'Unity pour faire "chuter" la charge.
Cela valide (pour moi) le choix de VPSs sous Linux au lieu de Windows. Moins chers...
Pour la consommation du CPU, une "pause" dans ta boucle d'Update principale même d'une milliseconde (genre "Thread.Sleep") peut solutionner le souci. C'est une astuce que j'utilise ailleurs qu'Unity pour faire "chuter" la charge.
Re: Jeu de baston multijoueur pour Mobile
Salut, mettre un Sleep fera baisser un peu la charge CPU, mais ralentira obligatoirement le nombre de requete traité par le serveur.
Il ne s'agit pas d'une boucle qui consomme sans rien faire, mais d'une boucle qui attend sans consommer de CPU si il n'y a aucun paquet UDP à traiter, et qui calcul un maximum quand un paquet est a traiter.
Hier j'ai passé 4heures à tout re-coder pour Serialiser ma structure des joueurs, et le résultat n'est vraiment pas terrible, trop dégouté, le serveur ne tient que 70 joueurs avant d'avoir son CPU a 100%
Du coup ce matin j'ai fais ce que j'aurai du faire hier, une simple boucle pour connaitre les performances des 2 systemes.
-50ms pour traiter mes paquets(50000 * 6 string) avec StringBuilder
-83ms pour traiter mes paquets(50000 * 1 struct de 6 int32) avec un Serialiser
-Plusieurs secondes en utilisant un Stream
-Plusieurs secondes en utilisant Concat de string
J'ai essayé de travailler sur un snapshot par client, pour envoyer uniquement les clients qui ont bougé depuis le dernier paquet envoyé et diminuer en meme temps le calcul du paquet
=> Le CPU consomme environ 10% de plus, +20% d'utilisation de RAM , mais la taille des paquets dimuent un poil.
Donc résultat très médiocre.
Je vais en rester la concernant le serveur, et me concentrer maintenant sur le jeu, 100 joueurs par serveur sur une meme partie c'est déjà correcte
Il ne s'agit pas d'une boucle qui consomme sans rien faire, mais d'une boucle qui attend sans consommer de CPU si il n'y a aucun paquet UDP à traiter, et qui calcul un maximum quand un paquet est a traiter.
Hier j'ai passé 4heures à tout re-coder pour Serialiser ma structure des joueurs, et le résultat n'est vraiment pas terrible, trop dégouté, le serveur ne tient que 70 joueurs avant d'avoir son CPU a 100%
Du coup ce matin j'ai fais ce que j'aurai du faire hier, une simple boucle pour connaitre les performances des 2 systemes.
-50ms pour traiter mes paquets(50000 * 6 string) avec StringBuilder
-83ms pour traiter mes paquets(50000 * 1 struct de 6 int32) avec un Serialiser
-Plusieurs secondes en utilisant un Stream
-Plusieurs secondes en utilisant Concat de string
J'ai essayé de travailler sur un snapshot par client, pour envoyer uniquement les clients qui ont bougé depuis le dernier paquet envoyé et diminuer en meme temps le calcul du paquet
=> Le CPU consomme environ 10% de plus, +20% d'utilisation de RAM , mais la taille des paquets dimuent un poil.
Donc résultat très médiocre.
Je vais en rester la concernant le serveur, et me concentrer maintenant sur le jeu, 100 joueurs par serveur sur une meme partie c'est déjà correcte
Moon RTS
Re: Jeu de baston multijoueur pour Mobile
? C'est possible ça?menfou a écrit :... mais d'une boucle qui attend sans consommer de CPU..
Re: Jeu de baston multijoueur pour Mobile
Oui, quand tu as une boucle infinie pour lire tes paquets UDP, tant que tu ne recois rien, ca ne consomme rien niveau CPU
Avec mes 100Threads, j'ai 0% de consommation CPU sur mon serveur si aucun paquet ne se présente, pourtant il y a bien 100 boucles infinies qui sont démarrées.
Avec mes 100Threads, j'ai 0% de consommation CPU sur mon serveur si aucun paquet ne se présente, pourtant il y a bien 100 boucles infinies qui sont démarrées.
Moon RTS
Re: Jeu de baston multijoueur pour Mobile
Quelle Distribution Linux est installée sur ton VPS?
Re: Jeu de baston multijoueur pour Mobile
J'installe que des Debian.
Je n'ai pas encore testé mon dédié physique avec 2x1Gbits et Xeon 4 core.
Je n'ai pas encore testé mon dédié physique avec 2x1Gbits et Xeon 4 core.
Moon RTS
Re: Jeu de baston multijoueur pour Mobile
Merci.menfou a écrit :J'installe que des Debian..
Désolé de la réponse tardive
Re: Jeu de baston multijoueur pour Mobile
OK, je prends le risque de passer pour le débile de service:
Dans tes vidéos, à aucun moment depuis l'introduction de la gestion des coups portés, je n'ai vu testé que tous les joueurs tapent avec contact. Je ne sais pas si je suis clair dans ma formulation, mais: vu le fonctionnement de ton serveur, es-tu sur qu'il ne lag pas si, disons, 50 persos tapent un adversaire dans le même frame? (je ne parle même pas encore de l'ajout éventuel de particules).
Dans tes vidéos, à aucun moment depuis l'introduction de la gestion des coups portés, je n'ai vu testé que tous les joueurs tapent avec contact. Je ne sais pas si je suis clair dans ma formulation, mais: vu le fonctionnement de ton serveur, es-tu sur qu'il ne lag pas si, disons, 50 persos tapent un adversaire dans le même frame? (je ne parle même pas encore de l'ajout éventuel de particules).