2016-08-28 1 views
0

J'utilise Qt 5.6. Je travaille sur une simple application de chat et je suis tombé sur plusieurs endroits en ligne en disant que vous devez créer un nouveau thread pour contenir QTcpSocket pour gérer toutes les nouvelles connexions dans un nouveau thread.Lors de la création d'un QTcpServer permettant plusieurs connexions, pourquoi ai-je besoin de créer un socket dans un nouveau thread?

J'essaie de comprendre pourquoi vous ne pouvez pas simplement utiliser un QList de QTcpSockets pour gérer toutes les connexions. Quelqu'un peut-il m'expliquer pourquoi?

Si je me trompe, et c'est une bonne chose à faire, dites-le moi aussi.

Merci d'avance.

+0

Vous ** ** peut avoir un '' QList' de QTcpSocket's pour gérer toutes les connexions sur le fil principal. En fait, cette solution est préférée dans Qt. Vous n'avez pas besoin de créer un nouveau thread pour chaque connexion. – Mike

+0

fournir quelques liens des sites en ligne auxquels vous faites référence. Je ne comprends pas ce que vous voulez dire par "* créer un nouveau thread pour contenir **' QTcpSocket' ** pour gérer ** toutes ** les connexions * ", Comment auriez-vous un' QTcpSocket' qui peut gérer toutes les connexions? vouliez-vous dire un 'QTcpServer'? – Mike

+0

@Mike Oh, je voulais dire que je crée un nouveau thread pour chaque 'QTcpSocket'. Plus particulièrement, je l'ai entendu de la playlist qt de voidrealm sur YouTube. Je l'ai fait vraiment tard le soir, j'étais un peu fatigué. Merci pour votre réponse. –

Répondre

1

L'utilisation du serveur multithreading tcp ou l'utilisation d'un serveur tcp thread dépend de votre tâche. Dans certaines tâches assez d'un thread et vous pouvez "juste utiliser un de QTcpSockets". Les principales caractéristiques de ces tâches sont les suivantes:

  1. Petit nombre de connexions entrantes simultanées. (Le nombre critique de connexions entrantes simultanées lorsque vous devez utiliser le multithreading dépend également de votre tâche, mais je suis convaincu que lorsque vous avez plus de 10 connexions entrantes simultanées, vous devez penser au multithreading.)
  2. Faible charge réseau/faible interactions réseau.

Dans d'autres cas, il est préférable de faire votre serveur TCP avec la possibilité de faire des travaux en parallèle. Le nombre de connexions que vous aurez dans un thread dépend de votre tâche, mais le nombre très élevé de threads est également une mauvaise idée, car vous avez alors des problèmes de performances. Beaucoup de temps sera consacré au changement de contexte.

Je pense que, dans votre cas, vous pouvez utiliser la variante la plus simple et « il suffit d'utiliser un QList de QTcpSockets »

+0

Merci pour votre réponse! Je voulais connaître la réponse à cela pour un moment maintenant. –