Envoyé par : gorby69
Date : 18/12/2006 10:52
Bonjour,
Je me pose quelques questions sur les sockets en XUL. J'ai implémenté dans mon application XUL un socket en écoute et un qui se connecte sur un script PERL, grâce à la seule doc que j'ai pu trouver sur les sockets en XUL: http://www.xulplanet.com/tutorials/mozsdk/sockets.php
Jusque là tout fonctionne bien mais j'ai voulu pousser un peu plus loin. Dans mon XUL, je réouvre un socket pour chaque connection vers mon script PERL, et j'ai remarqué que dès fois c'était très long (2s à 4s). De même je réouvre à chauqe fois un socket de mon script PERL sur mon socket en écoute dans mon XUL pour chaque communication dans ce sens.
J'ai donc logiquement (je pense) cherché à créer un socket et un seul (Perl en Serveur de socket et XUL qui s'y connecte), qui reste constamment ouvert pour y faire transiter mes données. Le hic c'est que je n'ai jamais réussi. Il y a toujours un moment ou les données restent bloquées au niveau du socket XUL, et elle passe quand je ferme le socket PERL. J'ai remarqué que j'arrive tout de même à faire passer ces données en créant une pose derrière l'envoi (coté XUL) avec un sleep ou un alert, mais derrière plus rien ne passe.
Mes questions :
Merci d'avance pour vos réponses... Je peux coller du code si nécessaire mais c'est quasiement le même que celui du lien.
GorBy69
Envoyé par : chris
Date : 11/04/2007 20:48
Bonjour,
Aurais-tu solutionné ton problème depuis ? Si oui, ça m'intéresse.
Envoyé par : chris
Date : 11/04/2007 23:58
Je crois m'en être finalement sorti avec :
readAllFromSocket(); function onbeforeunload() { gInStream.close(); } function readAllFromSocket() { try { var transportService = Components.classes["@mozilla.org/network/socket-transport-service;1"] .getService(Components.interfaces.nsISocketTransportService); var transport = transportService.createTransport(null,0,HOST,PORT,null); var stream = transport.openInputStream(0,0,0); gInStream = Components.classes["@mozilla.org/scriptableinputstream;1"] .createInstance(Components.interfaces.nsIScriptableInputStream); gInStream.init(stream); var dataListener = { data : "", onStartRequest: function(request, context){}, onStopRequest: function(request, context, status){ gInStream.close(); }, onDataAvailable: function(request, context, inputStream, offset, count){ this.data += gInStream.read(count); // TRAITEMENT DES DONNEES } }; var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"] .createInstance(Components.interfaces.nsIInputStreamPump); pump.init(stream, -1, -1, 0, 0, false); pump.asyncRead(dataListener,null); } catch (ex){ return ex; } return null; }
Avec ça, je peux "écouter" le socket et recevoir les données sans faire de requête régulière.
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.