2012-03-29 31 views
9

Tôi đang sử dụng Nodej và Socket.io. Khi khách hàng kết nối, các đối tượng JavaScript mới được tạo.Xóa các đối tượng khi ngắt kết nối socket.io

Những vật thể này có tồn tại mãi mãi không? Chúng có nên bị xóa hoặc xóa khi khách hàng ngắt kết nối không? Thậm chí có thể xóa đối tượng không? Tôi biết xóa sẽ không hoạt động ...

Cảm ơn - Tôi đoán đây là câu hỏi chung hơn và mọi đề xuất sẽ thực sự hữu ích.

Cảm ơn!

Trả lời

17

Nếu bạn không dọn dẹp, thì có, họ sẽ ở đó mãi mãi vì tôi cho rằng bạn đang làm cho họ toàn cầu.

Bạn nên dọn dẹp một lần ngắt kết nối người sử dụng bằng cách gắn vào người nghe disconnect sự kiện:

var clients = {} 
sockets.on('connection', function(socket) { 
    clients[socket.id] = socket; 

    socket.on('disconnect', function() { 
    delete clients[socket.id]; 
    }); 
}); 
+1

Tuyệt vời, cảm ơn bạn! Tôi giả sử tôi có thể sử dụng cùng một phương pháp cho 'khách hàng' để theo dõi các đối tượng khác không? Có một số đối tượng khác bên ngoài chức năng 'socket' được tạo ra. – dzm

+0

jup! Những gì một số người làm, họ thêm các đối tượng bên trong biến "socket", và nó bị phá hủy tự động. 'socket.data =" foo "' và sau đó các máy khách chỉ có một id cho socket đó. –

+0

Tuyệt vời, đó là một ý tưởng hay. Cảm ơn một lần nữa! – dzm

0

tôi nghĩ rằng câu trả lời được chấp nhận là không thực sự giải quyết vấn đề. Khi bạn thực hiện:

io.on('connection', function(socket){ 
    socket.on('event', function(){ 
     console.log('event fired'); 
    }); 
    socket.on('disconnect', function(){ 
     console.log('user disconnected'); 
    }); 
}); 

Trình nghe sự kiện ổ cắm được tạo trong cuộc gọi lại của io.on(). Sau khi ngắt kết nối, những sự kiện này nghe không thực sự nhận được gỡ bỏ .. tôi phải làm một cái gì đó như thế này:

socket.on('disconnect', function(){ 
    delete socket.namespace.sockets[this.id]; 
    console.log('user disconnected'); 
}); 

Trừ socket.io nội bộ loại bỏ tất cả các eventlisenters trong io.on() gọi lại. Danh sách sự kiện tồn tại

+0

xóa không được phép trong chế độ nghiêm ngặt là có một cách khác để đạt được điều này? –

Các vấn đề liên quan