Tôi hiện đang phát triển một add-on firefox là một khách hàng kết nối bằng cách sử dụng các cổng TCP đến một máy chủ.XPCOM Socket đang đóng. Làm thế nào để giữ cho nó sống?
Trong thử nghiệm nhỏ, mọi thứ hoạt động tốt, máy khách (bổ trợ ff) kết nối với máy chủ (được thiết kế bằng java) và gửi một tin nhắn, nhưng sau khi firefox đóng chốt.
Tôi biết nó không phải là vấn đề với mã của tôi ở phía máy chủ, vì tôi có thể kết nối với các máy khách khác (được thiết kế trong java và C++) và chúng không bao giờ đóng kết nối.
Tôi nghĩ rằng vấn đề là firefox phá hủy đối tượng socket sau khi không có tham chiếu đến nó, do đó đóng kết nối.
Dù sao đây là mã của tôi:
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);
Tôi đang sử dụng firefox 7, và tôi đang xây dựng các add-on sử dụng firefox SDK add-ons.
Bất kỳ ý tưởng nào về cách giữ ổ cắm còn sống, để đọc thêm?
Cảm ơn
"phá hủy đối tượng ổ cắm sau khi không có tham chiếu đến nó" - nó hoàn toàn có thể. Bạn đã đặt mã bạn đăng ở đâu? Và nó không đầy đủ - nó sử dụng không xác định trong bối cảnh của Addon SDK modules Components.classes thay vì Cc ... – Nickolay
Có, nếu không có tham chiếu đến socket hoặc các luồng của nó thì nó sẽ được thu gom rác sẽ đóng nó lại. Nhưng tại thời điểm đó các ổ cắm đã được vô dụng cho bạn kể từ khi bạn bị mất tất cả các tài liệu tham khảo cho nó và không có cách nào để truy cập nó một lần nữa. Tôi không nghĩ rằng bạn thực sự làm điều đó ... –