Bonjour à tous;
J'ai un processus perl qui reçoit des données d'un pipe et les traite.
Je dois rajouter des données venant du réseau.
J'ai construit un serveur TCP qui fait bien le travail, indépendamment du premier processus, et c'est dommage, car les deux processus travaillent sur des données qui peuvent être identiques.
Donc j'ai pensé à inclure ce serveur dans le premier processus pour qu'il puisse vérifier si les données qu'il reçoit du réseau sont déjà présentes, et dans ce cas, les droper.
Voici mon code:
Donc je lance le processus. Il se lance correctement et fait les tâches de traitement des données venant du pipe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 my $server = server->new(); my $thread = threads->create(sub {$server->server();}); my $thread2 = threads->create(sub { while(<STDIN>) { ...instructions et traitement des données ...
Je me connecte en telnet. La connexion se fait sans problème. Mais les données que j'envoie au serveur ne sont pas traitées.
Je pense que la ligne blocante est celle en gras. Mais je ne vois pas de moyen de m'en sortir du coup: Si la méthode accept est blocante, je ne peux jamais mettre ça dans un thread :-S Il doit bien y avoir une solution? Ce problème me parait basique, mais google ne m'a pas trop aidé :-S
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sub server { my($self) = @_; while (my $client = $serveur->accept()) { next if my $pid = fork; print "\n*** Connected ***\n"; # -> ça s'affiche bien print "--- I am PID $$ ---\n"; # ça s'affiche aussi my $message = ""; while( my $rep = <$client> ) { print "oui\n"; # -> ça ne s'affiche pas
Merci pour vos conseils/remarques/suggestions!
Partager