2011-10-23 9 views
6

Actualmente estoy desarrollando un complemento de Firefox que es un cliente que se conecta utilizando sockets TCP a un servidor.El zócalo XPCOM se está cerrando. ¿Cómo mantenerlo vivo?

En mi pequeña prueba todo funciona bien, el cliente (complemento de ff) se conecta al servidor (diseñado en java) y envía un mensaje, pero después de eso, Firefox está cerrando el socket.

Sé que no hay problema con mi código en el servidor, ya que puedo conectarme con otros clientes (diseñados en Java y C++) y nunca cierran la conexión.

Creo que el problema es que firefox destruye el objeto socket después de que no hay ninguna referencia a él, por lo que se cierra la conexión.

De todos modos aquí es mi código:

const {Cc,Ci} = require("chrome"); 

var host="192.168.1.100"; 
var port=9001; 
var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"] 
          .getService(Components.interfaces.nsISocketTransportService) 
          .createTransport(null, 0, host, port, null); 

var inputStream = transport.openInputStream(0, 0, 0); 
var inputInterface = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream); 
inputInterface.setInputStream(inputStream); 

var outputStream = transport.openOutputStream(0, 0, 0); 
var outputInterface = Components.classes["@mozilla.org/binaryoutputstream;1"].createInstance(Components.interfaces.nsIBinaryOutputStream); 
outputInterface.setOutputStream(outputStream); 

var msg="some message"; 
outputInterface.writeUtf8Z(msg); 

estoy usando Firefox 7, y yo estoy construyendo el add-on SDK usando Firefox add-ons.

¿Alguna idea sobre cómo mantener el zócalo vivo para futuras lecturas?

Gracias

+0

"destruye el objeto socket después de que no haya ninguna referencia a él" - es bastante posible. ¿Dónde pusiste el código que publicaste? Y está incompleto: no se define en el contexto de los módulos Addon SDK Components.classes en lugar de Cc ... – Nickolay

+3

Sí, si no se hace referencia al socket o a sus transmisiones, se recogerá el contenido no deseado que lo cerrará. Pero en ese momento, el socket ya no le sirve porque ha perdido todas las referencias y no tiene forma de volver a acceder a él. No creo que realmente hagas eso ... –

Respuesta

Cuestiones relacionadas