application client serveur, je vais avoir du mal à penser d'une manière propre aux données des clients de processus sur le côté serveur

StackOverflow https://stackoverflow.com/questions/4414655

Question

J'ai une application client serveur écrit en C ++ sous Linux. Lorsqu'un client se connecte à mon serveur, le serveur génère un thread qui attend le client d'envoyer les commandes de serveur à exécuter. les commandes sont dépendantes OS. le fil que le client parle au serveur, appelle les fonctions globales qui exécutent la commande nécessaire que le client veut. Donc, je dois avoir deux fonctions pour chaque OS commande dépend du client envoie au serveur à exécuter. Toutes ces fonctions globales sont définies dans la même tête que la fonction principale de fil est. Il devient un désordre de peu avec toutes ces fonctions pour différents systèmes d'exploitation à. Mon idée est d'écrire deux classes qui sont appelés WindowsFuncs et LinuxFuncs qui ont des fonctions membres statiques qui exécutent la commande requise pour que la classe OS a été conçu pour. Quelles sont quelques-unes des idées stackoverflows sur la façon de nettoyer ma logique?

Était-ce utile?

La solution

Cela ne ressemble pas à un problème de filetage. Sons comme vous pouvez utiliser l'héritage simple.

En utilisant quelque chose comme

abstract class OSMethods {
  void listDir();
}

class OSMethodsLinux : OSMethods {
  void listDir() { system.exec("ls"); }
} 
class OSMethodsWin : OSMethods {
  void listDir() { system.exec("dir"); }
}

Ensuite, le code de traitement client du serveur a comme méthode

  void accept(Socket s, OSMethods m) {
     s.readCommand();
     m.listDir();  // or whatever
  }

Assurez-vous que vous passez par exemple correct d'accepter de Linux ou Win classe. Donc, pas de méthodes statiques.

En général, j'ai trouvé que vous aurez besoin pas de méthodes statiques dans vos programmes (à l'exception principale), à ??moins que vous faites des trucs intelligents, la plupart des choses ne ont pas besoin et ils conduisent à la conception moins souple.

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