Question

La question concerne l'architecture d'un serveur avec Qt. Par exemple, il y a un slot ReadyRead() appelé quand une socket signale readyRead() S'il y a plusieurs types de demandes, nous pouvons

void Server::ReadyRead()
{
   QString msg = readFirstWordFromAvaiableData();
   switch (msg){
       case "PING":
       case "GET":  // and so on
   }
}

Je me demande s'il existe une autre façon de faire cela.Je suppose que ce n'est ni extensible ni confortable.

Si je veux que le serveur fonctionne avec un client écrit en Java, C, Perl, etc., je devrais utiliser QByteArray uniquement, non?Dans tous les exemples de QtDemo, le client envoie la taille du message avant le message.Est-ce nécessaire?

Ce serait bien si vous me suggériez des échantillons de serveurs écrits avec Qt (sur github, bitbucket, etc.).Je veux voir comment les serveurs de production sont organisés.

Était-ce utile?

La solution

Si chacune de vos commandes a une longueur fixe de la charge utile, il peut ne pas être nécessaire d'envoyer une longueur de message.

QByteArray est un wrapper pratique autour des tableaux de caractères non signés, et a quelques méthodes utilitaires utiles, donc c'est une bonne chose à utiliser.Vous pouvez également utiliser QString si votre protocole est basé sur du texte, mais sachez que par défaut, QString est Unicode, donc un caractère prend 2 octets au lieu d'un.Vous pouvez utiliser les fonctions de conversion appropriées (QString :: fromUtf8, QString :: fromAscii, etc.).

Je suggère d'abord de jeter un œil aux exemples dans la documentation Qt si vous ne l'avez pas fait.Cependant, je n’ai pas d’autres exemples à recommander.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top