2015-08-24 15 views
5

Tôi có một webapp nhỏ được xây dựng trên node.js, express và socket.io. Trong đó, tôi đang sử dụng hai không gian tên tạo ra như thế:socket.io — hạn chế số lượng kết nối tối đa cho mỗi không gian tên

lists = io.of('/lists'), 
views = io.of('/view'), 

Những gì tôi muốn làm, là để hạn chế số lượng kết nối trong không gian tên /views. Có cách nào để làm điều đó với socket.io? Tôi đã xem các tài liệu, nhưng không có gì để tìm thấy ở đó.

Bất kỳ Ý tưởng nào về cách thực hiện điều đó?

Xin cảm ơn!

Trả lời

3

Bạn có thể tạo một bộ đếm đơn giản (nếu cần thiết - để mở rộng các lớp):

var lists = io.of('/lists'); 
lists.max_connections = 10; 
lists.current_connections = 0; 

lists.on('connection', function(socket){ 
    if (this.current_connections >= this.max_connections) { 
    socket.emit('disconnect', 'I\'m sorry, too many connections'); 
    socket.disconnect(); 
    } else { 
    this.current_connections++; 
    socket.on('disconnect', function() { 
     this.current_connections--; 
    }); 
    /** something useful **/ 
    } 
}); 

UPD: Nếu bạn muốn khách hàng để tiếp tục cố gắng để kết nối với máy chủ, sử dụng:

socket.conn.close(); 

Thay vào đó:

socket.disconnect(); 
+0

ý tưởng tốt, sẽ kiểm tra xem nó, nhưng trông đi od! – philipp

+0

@philipp Có thể nghĩ rằng không cần kiểm tra bằng số lượng kết nối tối đa, nhưng lớn hơn hoặc bằng với trường hợp kết nối đồng thời. Tôi thay đổi câu trả lời của mình. –

+0

tuyệt vời, hoạt động! – philipp

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