Obecnie pracuję nad dodatkiem firefox, który jest klientem, który łączy się za pomocą gniazd TCP z serwerem.Gniazdo XPCOM się zamyka. Jak utrzymać to przy życiu?
W moim małym teście wszystko działa poprawnie, klient (ff add-on) łączy się z serwerem (zaprojektowanym w Javie) i wysyła wiadomość, ale po tym firefox zamyka gniazdo.
Wiem, że to nie jest problem z moim kodem na serwerze, ponieważ mogę łączyć się z innymi klientami (zaprojektowanymi w java i C++) i nigdy nie zamykać połączenia.
Myślę, że problem polega na tym, że firefox niszczy obiekt gniazda, gdy nie ma do niego odniesienia, co powoduje zamknięcie połączenia.
Zresztą tutaj jest mój kod:
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);
używam Firefoksa 7, i buduję ten dodatek przy użyciu przeglądarki Firefox SDK.
Jakieś pomysły na to, jak utrzymać gniazdo przy życiu, do dalszych odczytów?
Dzięki
"niszczy obiekt gniazda po braku odniesienia do niego" - jest całkiem możliwe. Gdzie umieściłeś opublikowany kod? I jest niekompletne - używa niezdefiniowanych w kontekście modułów Addon SDK Components.classes zamiast Cc ... – Nickolay
Tak, jeśli nie ma odniesienia do gniazda lub jego strumieni, to będzie to śmieci, które go zamkną. Ale w tym momencie gniazdo jest już bezużyteczne, ponieważ utraciłeś wszystkie odniesienia do niego i nie masz możliwości ponownego dostępu do niego. Nie sądzę, że naprawdę to robisz ... –