Forum Programmation.autre Choix d'un moteur réseau/event

Posté par  (site web personnel) .
Étiquettes :
2
26
juil.
2012

Bonjour,

J’hésite encore fortement entre mon moteur Qt pour mon serveur MMO et tout refaire en boost (qui me prendrai pas mal de temps). Les points important sont: les events pour passer des messages entre les threads et le réseau.
J'ai écouté pas mal d'options positive sur Boost, mais ça veux dire apprendre une autre lib, tout refaire, …
Et ce qui me gène, c'est que je n'est pas de chiffre pour comparer les 2! Si c'est juste 20% + lent avec Qt pour les fortes charges, alors je garde Qt.

Merci d'avance de tout les benchmarks que vous pouvez me fournir.
PS: pour avoir de meilleurs performances j'ai du désactiver le flag -glib sous gentoo pour qt-core.

  • # moteur réseau ?

    Posté par  . Évalué à -5.

    Tu veux réimplémenter la couche TCP / UDP du kernel ;) ?

    • [^] # Re: moteur réseau ?

      Posté par  (site web personnel) . Évalué à 2.

      Ca à quoi à voir avec le noyau ce que je demande? Car boost et Qt sont des lib en espace utilisateur…

      Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

  • # Ça sert à rien de comparer

    Posté par  . Évalué à 4.

    Franchement, boost sera peut-être un peu plus rapide que Qt si tu aime faire du C++ non-virtuel, mais ne t'attend pas à du ×2.
    Si tu à des problèmes de performances, ils ne viendront certainement pas de ton système d'event ou de ton backend réseau, mais plutôt de tout ce qu'il y a entre les deux : parsage des paquets entrant, génération des paquets sortants, ou de ce qu'il y à après : logique du jeu, concurrence entre les clients, ou de tout ce qui est protocolaire (du genre, si dès qu'un client X fait une action, je l'envoie au 100 clients à proximité, et que 100 clients font des actions …)

    Enfin bref, n'optimise que des programmes finis qui marchent. Si c'est pas lent, je vois pas pourquoi tu voudrai gagner 20% en passant d'une lib que tu connais à une lib que tu connais pas.

    Mais si tu à juste envie d'apprendre boost, alors arrête de chercher des raisons bidons ;)

    • [^] # Re: Ça sert à rien de comparer

      Posté par  (site web personnel) . Évalué à 0. Dernière modification le 26 juillet 2012 à 21:52.

      Qt d'aprés mes testes ne dépasse pas les 1Mo/s de débit sur la boucle locale. Et c'est le gros facteur limitant dans mon programme (profiling à l'appuie).
      Voila les mesures faites: 16 000 packet tcp par seconde avec Qt, contre 200 000 packet traité par seconde par mon application.

      Le problème c'est qu'une fois le programme totalement fini, tout refaire -> j'aurai pas le courage, alors que si je le fait quand le serveur n'est pas trop gros, c'est faisable.

      Et les gens sembles ce rire quand je dit que j'ai fait mon serveur en Qt, j'aimerai savoir si c'est justifié, ou si c'est car il trouve que Qt est un framework pas spécialisé pour ça.

      Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

      • [^] # Re: Ça sert à rien de comparer

        Posté par  . Évalué à 4.

        Le problème c'est qu'une fois le programme totalement fini, tout refaire -> j'aurai pas le courage, alors que si je le fait quand le serveur n'est pas trop gros, c'est faisable.

        Sinon, si tu n'a pas envie de tout réécrire même si tu en a envie, alors fait un truc modulaire et un backend pour Qt. Tu pourra faire le backend boost::asio plus tard, ou en même temps…

    • [^] # Re: Ça sert à rien de comparer

      Posté par  (site web personnel) . Évalué à 2.

      Il y a deux ans, j'avais fait des tests de performances entre boost.asio et les classes Qt pour le réseau: il n'y avait pas photo, boost.asio mettait une grosse fessée à Qt. La situation a peut être évolué depuis…

      Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

      • [^] # Re: Ça sert à rien de comparer

        Posté par  (site web personnel) . Évalué à 0.

        Entre Qt 4 et Qt5, même Qt4 d'il y as 2 ans, Qt est à la traine (choix des dev d'utilisé select au lieu de epoll pour gagner un peu de mémoire)
        Et tu avais testé pour les events?

        Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

        • [^] # Re: Ça sert à rien de comparer

          Posté par  (site web personnel) . Évalué à 2.

          Et tu avais testé pour les events?

          Cad?

          Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

          • [^] # Re: Ça sert à rien de comparer

            Posté par  (site web personnel) . Évalué à 0.

            Le passage d'events de Qt (signal/slots), semble assez limité: quelque 200 000 signals/slot traité par secondes. Ce qui pose des problèmes d'échelle.

            Théoriquement limité à 200 000 clients envoyant 1 packet par seconde, alors si ont as seulement un aller et un retour entre la classe réseau (socket tcp), et la classe de traitement (le thread), déjà ça fait la moitié de clients supportés. Si ensuite ce sont 5 packet par secondes que les clients peuvent envoyé… on tombe 20 000 client.

            Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

  • # messagerie

    Posté par  . Évalué à 3.

    Si tu veux passer des messages entre threads, process, machines, alors tu devrais jeter un coup d'oeil à l'AMQP, qui pourrait combler tes besoins. ZeroMQ en est une implémentation libre qui a le vent en poupe http://www.zeromq.org/

    http://www.zeromq.org/whitepapers:measuring-performance

    D'autres alternatives libres sont RabbitMQ et ActiveMQ.

    • [^] # Re: messagerie

      Posté par  . Évalué à 3.

      Je conseille fortement zeromq que j'utilise sur mon projet perso. Il permet entre autre de s'affranchir d'un service externe ce qui n'est pas rien.
      hop un petit schéma de mon architecture basée sur zeromq : https://dl.dropbox.com/u/147977/ncs_dev.png

    • [^] # Re: messagerie

      Posté par  (site web personnel) . Évalué à 1.

      Est ce que Gearman ne ferait pas aussi parti de la liste ?
      Je ne l'ai pas vraiment comparé aux autres solutions et ne sait pas si elles sont équivalentes.

      Je l'utilise car packagé par ma distribution, car l'extension php est facilement compilable car non packagée, et qu'il existe une lib php de gestion des workers .

  • # Sûr de vouloir faire du C++ ?

    Posté par  (site web personnel) . Évalué à 2.

    Tu es sûr de vouloir faire du C++ ? Dans le cas contraire, je te conseillerais d'aller jeter un coup d'oeil à Go.

    À mon avis, il conviendrait bien pour ça. Par exemple, tu parlais de 200 000 clients et Go peut très bien gérer 200 000 goroutines (une sorte de thread en plus léger). Le passage de messages entre ces goroutines se fait avec des chans (ça vient de base avec le langage).

    Maintenant, si tu préfères rester sur du C++, ce que je peux comprendre, je n'ai pas grand chose à te conseiller ;-)

    • [^] # Re: Sûr de vouloir faire du C++ ?

      Posté par  (site web personnel) . Évalué à 3.

      Oui, pour sortir quelque chose, et pas faire un vaporeware, je préfère rester sur quelque chose que je connais correctement.
      J'ai bien lu les mêmes choses à propos de Go, mais j'ai pas le temps d'apprendre un autre langage.

      Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.