Giả sử có những đối tượng làm thuê bao đến một máy chủ ổ cắm như vậy:Làm cách nào để hủy đăng ký thuê bao socket.io?
socket.on('news', obj.socketEvent)
Những đối tượng có tuổi thọ ngắn và thường xuyên được tạo ra, tạo ra nhiều thuê bao. Điều này có vẻ giống như một rò rỉ bộ nhớ và một tình huống dễ bị lỗi đó bằng trực giác sẽ được ngăn chặn theo cách này:
socket.off('news', obj.socketEvent)
trước khi đối tượng bị xóa, nhưng than ôi, không có một phương pháp off
trong ổ cắm. Có phương pháp khác có nghĩa là cho điều này?
Chỉnh sửa: không tìm thấy câu trả lời Tôi chỉ định phương thức trống để ghi đè phương pháp trình bao bọc cho trình xử lý sự kiện ban đầu, ví dụ sau.
var _blank = function(){};
var cbProxy = function(){
obj.socketEvent.apply(obj, arguments)
};
var cbProxyProxy = function(){
cbProxy.apply ({}, arguments)
}
socket.on('news', cbProxyProxy);
// ...and to unsubscribe
cbProxy = _blank;
Điều đó dường như hoạt động, sự kiện biến mất khỏi SocketNamespace mặc dù tôi chưa thực hiện thử nghiệm rộng rãi về phần này. Ngoài ra bạn đã đúng về các giải pháp proxy, do đó, nó được cập nhật cho sự hài hước của nó –
Điều này không hoạt động? WTF cbProxy là gì? –
Điều gì không hoạt động? 'cbProxy' là một phương thức gọi lại được định nghĩa bởi OP. –