Perl - Win32 - Comment faire une lecture non bloquante d'un descripteur de fichier depuis un autre processus?

StackOverflow https://stackoverflow.com/questions/141332

Question

J'écris un code de serveur qui communique avec un processus client via STDIN. J'essaie d'écrire un extrait de code Perl qui reçoit de manière asynchrone les réponses du client STDOUT. La version bloquante du code pourrait ressembler à ceci:

sub _read_from_client
{
   my ($file_handle) = @_;
   while (my $line = <$file_handle>) {
      print STDOUT $line;
   }
   return;
}

Il est important de noter que l'extrait de code doit fonctionner sur la plate-forme Win32. De nombreuses solutions pour les plates-formes * nix ne m'intéressent pas. J'utilise ActivePerl 5.10.

Était-ce utile?

La solution

Ce fil sur Perlmonks suggère que vous pouvez créer un socket non bloquant sous Windows en Perl de cette façon:

ioctl($socket, 0x8004667e, 1);

Plus de détails et de ressources dans ce fil

Autres conseils

Si vous ne souhaitez pas emprunter la voie de bas niveau, vous devrez examiner les autres solutions plus structurées.

Vous pouvez utiliser un fil pour lire à partir de l'entrée et le laisser en extraire toutes les données lit dans un Thread :: Queue que vous gérez ensuite dans votre thread principal.

Vous pouvez consulter POE qui implémente un cadre basé sur des événements, en particulier POE :: Wheel :: Run :: Win32 . Potentiellement, vous pouvez également voler le code pour implémenter vous-même les lectures non bloquantes.

Vous pouvez consulter [Coro], qui implémente un système multitâche coopératif utilisant des routines. Ceci est généralement similaire aux threads, sauf que vous obtenez des threads en espace utilisateur, pas des threads système.

Vous n'avez pas précisé jusqu'où vous voulez aller, mais vous avez le choix entre sysread et un framework, ou l'écriture de ce framework vous-même. Le plus simple est d’utiliser des threads ou en passant par le code de Poe :: Wheel :: Run :: Win32 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top