Forum de la communauté SFML
Aide => Réseau => Discussion démarrée par: actuenligne le Mai 22, 2012, 02:48:28 pm
-
Bonjour :)
J'ai commencé ma première maquette d'application en réseau.
Il y a deux clients et un serveur qui ne fait que relayer ce que les clients envoient,
le tout en TCP.
Pour l'instant l'émission marche bien : le client envoie dès qu'il reçoit une input.
En revanche j'ai plus de mal avec la réception, car je ne sais pas comment faire
pour que le client soit toujours à l'écoute du serveur sans ralentir l'application.
Faut-il laisser en boucle un socket.receive(), pour être à l'écoute du serveur ?
Le problème est que même en mettant la socket non bloquante,
l'application a de terribles lags quand je fais ça (je n'utilise pas de threads).
Et est ce qu'on peut envisager d'avoir deux sockets par client : une qui ne fait que recevoir
et l'autre qui s'occupe d'émettre ?
Ou alors faut-il nécessairement utiliser des Selector dans ce cas ?
Merci d'avance pour votre aide !
-
Le problème est que même en mettant la socket non bloquante,
l'application a de terribles lags quand je fais ça (je n'utilise pas de threads).
Ca c'est pas normal. Tu es sûr que tu ne fais rien de bizarre ?
Sinon c'est pas compliqué :
- soit tu gardes toutes tes sockets dans le thread principal en mode non-bloquant (ok uniquement si tu as déjà une boucle de rafraîchissement qui tourne régulièrement)
- soit tu utilises un unique thread + un sélecteur pour toutes tes sockets
- soit tu utilises un thread par socket
-
Merci Laurent !
Oui, c'est bien ce que je me disais, ce n'est pas normal donc...
J'ai du faire une erreur ailleurs dans le code.
Et est ce qu'on peut se permettre d'appeler à chaque frame la fonction .receive() du socket en
mode non-bloquant ?
(en gros est ce que ça risque d'affecter le processeur ou la bande passante ?)
-
Et est ce qu'on peut se permettre d'appeler à chaque frame la fonction .receive() du socket en
mode non-bloquant ?
Oui, aucun problème.