Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu][SFML2.0]Timeout des sockets sur un TcpSelector  (Lu 3323 fois)

0 Membres et 1 Invité sur ce sujet

Neckara

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
[Résolu][SFML2.0]Timeout des sockets sur un TcpSelector
« le: Juin 13, 2012, 09:42:46 pm »
Bonjour,

J'ai un TcpSelector qui gère plusieurs sockets et j'aimerais que lorsqu'un client ne répond plus, le déconnecter.
J'ai regardé la doc mais je n'ai rien trouvé à ce propos.
Le problème c'est que je ne peux pas faire un thread par client pour utiliser un TcpSelector par socket, niveau performance, c'est intenable.

Parcourir régulièrement une liste de socket pour voir ceux qui sont inactif ne me semble pas très optimisé...

Sinon une autre question que je me pose :
Est-ce que parcourir un tableau de socket après un selector.wait() est vraiment plus optimisé que de faire en sorte que le selector.wait construise une liste de socket ayant reçus des données comme dans la 1.6 ?

EDIT : selon la doc,
Le status indique si le socket est déconnecté, est-ce que la déconnexion prend en compte les timeout ? (il ne me semble pas que le protocole TCP le face, enfin d'après ce que j'ai vu en cours)
S'il prend en compte les timeouts, est-il possible de faire varier la durée au bout de laquelle on considère la connexion perdue?
« Modifié: Juin 16, 2012, 03:35:50 pm par Neckara »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Timeout des sockets sur un TcpSelector
« Réponse #1 le: Juin 13, 2012, 09:55:08 pm »
Citer
J'ai un TcpSelector qui gère plusieurs sockets et j'aimerais que lorsqu'un client ne répond plus, le déconnecter.
J'ai regardé la doc mais je n'ai rien trouvé à ce propos.
Qu'est-ce qui coince ?
"ne répond plus" c'est send ou receive qui renvoie sf::Socket::Disconnected, et "déconnecter" c'est disconnect().

Citer
Est-ce que parcourir un tableau de socket après un selector.wait() est vraiment plus optimisé que de faire en sorte que le selector.wait construise une liste de socket ayant reçus des données comme dans la 1.6 ?
Oui :)
Laurent Gomila - SFML developer

Neckara

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : [SFML2.0]Timeout des sockets sur un TcpSelector
« Réponse #2 le: Juin 13, 2012, 10:05:30 pm »
Je me suis mal exprimé.

Le serveur va recevoir des données puis les traiter.

Si le client interromps brutalement la connexion (en dehors d'en send ou receive), par exemple en débranchant sa prise.
Est-ce que niveau serveur je vais recevoir une erreur ou disconnect sur le socket du client (avant de faire un autre send ou receive) ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Timeout des sockets sur un TcpSelector
« Réponse #3 le: Juin 13, 2012, 10:18:14 pm »
Non tu ne recevras rien. Tant que tu n'essayes pas de lire ou d'écrire sur la socket, impossible de connaître l'état de la connexion.
Laurent Gomila - SFML developer

Neckara

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : [SFML2.0]Timeout des sockets sur un TcpSelector
« Réponse #4 le: Juin 14, 2012, 06:43:40 am »
Il faudrait donc que toutes les X secondes j'envoie un socket à chaque client pour vérifier s'il est encore en ligne? ça peut être très lourd.

L'autre solution serait de demander au client d'envoyer régulièrement une requête UDP.
Il faudrait donc qu'à chaque début de connexion j'envois au client un pointeur et que le client me renvois ce pointeur pour trouver plus facilement le socket TCP associé. Mais là il faudra parcourir régulièrement le tableau de socket pour voir les timeouts.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML2.0]Timeout des sockets sur un TcpSelector
« Réponse #5 le: Juin 14, 2012, 08:49:31 am »
Il y a des techniques pour gérer en live les deconnexions, je ne peux que te conseiller de lire un peu sur le sujet avant de t'aventurer dans des algorithmes persos, ou de tirer des conclusions trop hâtives :)
Laurent Gomila - SFML developer