J'ai une application client/serveur que j'ai faite en utilisant des sockets. La chose est, quand j'envoie une commande demandant des informations et attendre une réponse, je bloque jusqu'à ce que la réponse arrive. Cela rend plus difficile la mise en œuvre de la requête/réponse bidirecional. Permettez-moi d'expliquer à l'aide d'un exemple: Le client peut lister les fichiers dans un répertoire du serveur, donc je fais someting comme ça dans le code:Conversation client/serveur - est-ce que je me trompe?
Code client: 1- commande Envoyer la demande: LS/ 2- Blocs en attendant le LS responde. 3- Obtenez la liste des fichiers.
La raison pour laquelle j'ai fait cela est que le client peut avoir à transférer un fichier, donc je le fais: 1- Envoyer la demande de transfert d'un fichier. 2- Blocs sur read() en attente de voir si le serveur accepte 3- Seulement si c'est le cas, envoyez le fichier.
Donc, c'était bien jusqu'à ce que je devais ajouter au serveur la possibilité de demander n'importe quoi. Dans mon code, le client peut demander n'importe quoi et se faire bloquer en attendant une réponse. Le serveur peut alors envoyer toute commande de requête qui n'aura aucun sens pour la réponse que le client attend. Cela viderait la conversation.
Une résolution que je pensais est de ne jamais bloquer pour une réponse. Je voudrais envoyer une commande de demande, puis revenez pour attendre n'importe quelle demande ou réponse du serveur, si une réponse arrive, je voudrais envoyer le fichier. Donc la chose est que je dois ajouter comme un ID dans chaque paire de demande/réponse pour savoir quelle réponse est pour quelle demande? Post-scriptum: Je suis assez perdu dans la façon de concevoir une conversation en réseau entre les hôtes et n'ai jamais lu un livre sur les modèles de conception pour les applications réseau.
PS2: dsl mon mauvais anglais;)
Juste pour ajouter plus d'informations ... J'ai un client de classe que toutes mes méthodes sont quelque chose comme ça (en Java): public Liste listRemoteDir (String dir) throws Exception –
fredcrs