2012-03-07 2 views
6

Tôi đã tìm thấy các ổ cắm không bị phá hủy hoàn toàn ở phía máy chủ socket io khi ngắt kết nối thủ công chúng. Tôi đã tìm thấy this topic on github hữu ích. Trong khi tôi đang tìm kiếm một số liên kết biến ngăn GC làm sạch ổ cắm, tôi đang hỏi một câu hỏi ở đây.Rò rỉ bộ nhớ bằng cách sử dụng socket.io

Nếu bất kỳ ai ở đây gặp phải vấn đề tương tự, điều này sẽ giúp ích rất nhiều.

mã mà không làm việc:

socket.on('disconnect', function(){ 
    socket.removeAllListeners(); 
}); 

///................... 

socket.disconnect(); 

Cách giải quyết đó, tuy nhiên, sử dụng các lĩnh vực thư viện hạn chế:

delete io.sockets[url]; 
io.j = []; 

Trả lời

1

thực sự, điều này đang làm việc như dự định, khi bạn ngắt kết nối một ổ cắm bạn chỉ đơn giản nhà nước bạn không mong đợi để nhận được bất kỳ dữ liệu nhiều hơn từ ổ cắm đó ngay bây giờ, để thực sự phá hủy các ổ cắm bạn về cơ bản làm hành động delete socket. Sử dụng điều này trên các sự kiện ngắt kết nối, ví dụ:

socket.on('disconnect', function(){ 
    delete socket; 
}) 

bạn cũng có thể làm điều này trên io.sockets.sockets Object trên một chức năng bên ngoài:

function deleteSocket(socketID){ 
    delete io.sockets.sockets[socketID]; 
} 
+4

bạn chỉ có thể 'thuộc tính của các đối tượng và DELETE' không phải đối tượng chính nó – buley

+0

io.sockets.sockets [socketID] vẫn bị xóa. –