2017-10-14 4 views
0

Je vois certaines applications utilisent plusieurs sockets. Par exemple, pour le chat, ils utilisent une socket unique et pour le téléchargement de fichiers, ils utilisent d'autres socket etc. Pourquoi ce processus est-il nécessaire quand il peut être fait dans un socket? est-ce parce que la manière dont ils gèrent la connexion et ouvre un nouveau slot de connexion après chaque appel d'acceptation?Combien de sockets créer du côté client?

Je travaille sur l'application de chat IOCP et j'ai été confondu par ce schéma. Si je veux gérer les connexions, je fais 1 socket pour chaque client mais si le client envoie un fichier, mon serveur n'a aucun moyen d'allouer de la mémoire pour le téléchargement, car je le fais après avoir manipulé la connexion nouvellement acceptée. mémoire nécessaire pour les fichiers dans le pool de mémoire spécialement pour le nettoyage et la libération de la mémoire. Ai-je besoin de réaffecter la mémoire en fonction des commandes si j'utilise une seule socket côté client pour que les autres tampons ne soient pas écrasés? ou le moyen le plus simple est d'utiliser 1 socket pour chaque opération qui prend beaucoup de mémoire comme le fichier envoyant des images etc de sorte que mon serveur alloue automatiquement un tampon unique pour chaque nouvelle connexion?

Et quand devrais-je utiliser les SECTIONS CRITIQUES dans le protocole IOCP? dans les threads de travail si je veux accéder au tampon après avoir reçu des données, puis le copier dans le tampon total reçu. Ai-je besoin d'entrer des sections critiques avant que je copie du tampon de temp à tout le tampon de sorte que les autres discussions n'interfèrent pas avec les valeurs?

Répondre

0

Un socket d'écoute côté serveur crée un nouveau socket chaque fois qu'une demande provient d'un client. À ce stade, un nouveau thread devrait être créé pour communiquer avec ce client: il traitera de la communication un-à-un avec le client donné. Toutes les ressources nécessaires doivent être allouées dans ce fil. Du côté client, vous avez un thread qui s'occupe du serveur.

+0

Créer un filetage par connexion est déconseillé et ne s'adapte pas très bien. La création de threads a beaucoup de frais généraux. Ma question était: dois-je créer plus de sockets pour différentes opérations côté client? comme le partage de fichiers partage d'image chat de texte etc chacun a sa prise unique de sorte qu'il sera processus asynchrone. –