Explications socket et thread SVP - Programmation
Marsh Posté le 06-02-2002 à 13:20:29
Citation : - Est-ce que le serveur doit ensuite fermer ce socket et en ouvrir un à chaque fois qu'un client fait une requète ou est-ce que c'est une fois au départ et on la garde dans que le client n'a pas finit ou un certain temps ? |
Vaut mieux garder la meme socket un certain temps (ca economise un peu de bande passante et tmps cpu)
Citation : - Le serveur doit stocker les sockets créé mais comment fait-il pour écouter les demandes de connexions et répondre aux client déjà connectés? |
T'est en quel langage :
Si java alors
utilise les threads, tu associe à chaque client un thread dont le seul boulot c'est d'ecouter la socket avec son client.
sinon si c/c++
Si tu peux utiliser les threads, utilise les
sinon regarde la doc du select (tu ecoutes plusieurs sock en meme temps)
Citation : - Je devrais utiliser les threads. Vois pas concrètement à quoi ils servent. |
Un thread, c'est un chemin d'execution en parallele avec ton chemin d'exec principal. Du coup, si tu bloque dans un thread sur un read ou write sur une socket, ton interface graphique et tout le reste continue à s'executer et le thread socket se debloque tout seul lorsqu'un event rez se produit sur ta socket...
Ensuite faut voir combien de clients vont se connecter à ton serveur. S'il y en a vraiement bcp, vaut mieux utiliser le select qui consome bcp moins de ressources sys que les threads.
Marsh Posté le 06-02-2002 à 14:43:52
merci!
Les select c'est pour le mode asynchrone c'est ça ?
Pourquoi est-ce moins gourmand en ressources ?
Comment ça marche?
Marsh Posté le 06-02-2002 à 16:10:49
pour le select RTFM
quant à savoir pkoi les threads c'est plus lourd qu'un simple select, lit un peu de doc sur comment un systeme d'exploitation gere les threads et tu comprendras tout de suite...
Marsh Posté le 06-02-2002 à 16:40:20
Voilà l'algo si j'ai bien compris:
Serveur
Boucle "infinie"
{
-attente connection
-demande de connection{
-création d'un socket
-ajout du socket à la liste des clients
-création d'un thread pour écouter le client
(Chaque thread créé écoute le client et lorsque celui-ci
se manifeste, le thread envoi le message à tous les
autres clients.)
}
Serveur
-demande de création d'un socket
-création d'un thread qui écoute le serveur
(Le thread créé écoute le serveur et lorsque celui-ci
se manifeste, le thread affiche le message au client.)
boucle tant que l'utilisateur le veut
{
-attendre que le client tape un message
-on envoi ce message au serveur
}
De cette façon, le serveur est bloqué sur les attentes de connection, c'est normal non, il n'a rien d'autre à faire puisque les threads s'occupent d'écouter les clients ?
Qu'est-ce que change l'asynchrone dans mon algo, je vois pas?(enfin je dois pas comprendre quoi!)
Merci d'avance!
Marsh Posté le 06-02-2002 à 16:41:03
PARDON, Petite erreur.
Voilà l'algo si j'ai bien compris:
Serveur
Boucle "infinie"
{
-attente connection
-demande de connection{
-création d'un socket
-ajout du socket à la liste des clients
-création d'un thread pour écouter le client
(Chaque thread créé écoute le client et lorsque celui-ci
se manifeste, le thread envoi le message à tous les
autres clients.)
}
Client
-demande de création d'un socket
-création d'un thread qui écoute le serveur
(Le thread créé écoute le serveur et lorsque celui-ci
se manifeste, le thread affiche le message au client.)
boucle tant que l'utilisateur le veut
{
-attendre que le client tape un message
-on envoi ce message au serveur
}
De cette façon, le serveur est bloqué sur les attentes de connection, c'est normal non, il n'a rien d'autre à faire puisque les threads s'occupent d'écouter les clients ?
Qu'est-ce que change l'asynchrone dans mon algo, je vois pas?(enfin je dois pas comprendre quoi!)
Merci d'avance!
Marsh Posté le 06-02-2002 à 16:41:34
comprend pas, désolé
wpk a écrit a écrit : pour le select RTFM quant à savoir pkoi les threads c'est plus lourd qu'un simple select, lit un peu de doc sur comment un systeme d'exploitation gere les threads et tu comprendras tout de suite... |
Marsh Posté le 06-02-2002 à 17:46:28
commonçons par le plus simple
Citation : comprend pas, désolé |
le RTFM est une expression courramant utilisé, pour indiquer poliment d'aller lire la doc (Read The Fu**ing Manual)
Les algos sont bons.
Citation : Qu'est-ce que change l'asynchrone dans mon algo, je vois pas?(enfin je dois pas comprendre quoi!) |
Tes algos, pour moi, (c'est pas forcement une reference) c'est de l'asynchro meme si c'est discutable vu que dans chaqun de tes threads t'es synchrone (tu bloque sur les primitives rezo jusqu'à l'obtention d'une reponse).
Marsh Posté le 06-02-2002 à 19:24:48
sous linux : man -s 3c select
sous windows : la msdn
aller, je fournis le sav complet et je te file la compie de l'article de la msdn (sous nux c'est quasiment identique, la declaration de la fonction tout du moins est la meme)
Citation : |
Marsh Posté le 06-02-2002 à 11:49:46
Voilà, j'essaye de faire un chat avec des sockets.
Pour l'instant j'ai fait un serveur et un client. Lorsqu'un client se connecte, le serveur crée un socket et lui envoi l'heure.
Mais je me pose bcp de questions:
- Est-ce que le serveur doit ensuite fermer ce socket et en ouvrir un à chaque fois qu'un client fait une requète ou est-ce que c'est une fois au départ et on la garde dans que le client n'a pas finit ou un certain temps ?
- Le serveur doit stocker les sockets créé mais comment fait-il pour écouter les demandes de connexions et répondre aux client déjà connectés?
- Je devrais utiliser les threads. Vois pas concrètement à quoi ils servent.
- On m'a dit que je devrais utiliser le mode asynchrone parce que j'aurais bcp de socket mais comment ça marche (je crois que c'est pour ne pas bloquer le serveur sur un client mais je comprend même pas bien pourquoi il se bloquerais ?)
J'ai cherché pourtant des infos mais je trouve que des exemples qui sont pour moi incomprehensible pour l'instant.
Je recherche quelqu'un qui pourraît m'expliquer simplement?
merci