2011-08-29 39 views
5

Tôi đang phát triển một ứng dụng mà khách hàng kết nối với máy chủ nodejs qua Socket.io và đăng ký nhiều sự kiện khác nhau. Các đăng ký này khá phức tạp không thể được xử lý bằng tính năng kênh của Socket.IO.Cách mô phỏng lỗi kết nối trong Socket.IO

Điều này có nghĩa là khách hàng cần theo dõi đăng ký của mình và có thể phải đăng ký lại khi nó bị ngắt kết nối. Thật không may, tôi không hoàn toàn chắc chắn như thế nào Socket.IO xử lý kết nối lại và chính xác như thế nào trong suốt xảy ra cho khách hàng.

Vì vậy, đây là câu hỏi: làm cách nào tôi có thể mô phỏng lỗi kết nối và buộc Socket.IO kết nối lại?

+3

Rút cáp Ethernet và cắm lại? – xavierm02

+0

Hoặc có thể chỉ cần xóa kết nối ở hai bên mà không đóng nó trước để xem phản ứng của bên kia. – xavierm02

+0

@ xavierm02: Điều đó sẽ hiệu quả, nhưng thực sự không phải là loại phương pháp mà bạn muốn sử dụng trong các bài kiểm tra đơn vị :-) Và làm cách nào để "xóa" kết nối? – n3rd

Trả lời

0

Socket.io đang cung cấp cho bạn các sự kiện trong đối tượng ổ cắm của bạn. Trên thực tế, bạn có thể tìm thấy các công cụ khác nhau bằng cách đọc API của chúng.

Xem dụ này trên stackoverflow Socket.IO handling disconnect event

-1

Từ kinh nghiệm của tôi, tôi thấy điều này là giải pháp dễ nhất và hữu ích:

Khách hàng bên:

// the next 3 functions will be fired automatically on a disconnect. 
// the disconnect (the first function) is not required, but you know, 
// you can use it make some other good stuff. 

socket.on("disconnect", function() { 
    console.log("Disconnected"); 
}); 

socket.on("reconnect", function() { 
    // do not rejoin from here, since the socket.id token and/or rooms are still 
    // not available. 
    console.log("Reconnecting"); 
}); 

socket.on("connect", function() { 
    // thats the key line, now register to the room you want. 
    // info about the required rooms (if its not as simple as my 
    // example) could easily be reached via a DB connection. It worth it. 
    socket.emit("registerToRoom", $scope.user.phone); 
}); 

Server side:

io.on('connection', function(socket){ 
    socket.on("registerToRoom", function(userPhone) { 
    socket.join(userPhone); 
    }); 
}); 

Và đó là điều đó. Rất đơn giản và thẳng về phía trước.

Bạn cũng có thể thêm vào ổ cắm đã kết nối (chức năng cuối cùng) một số cập nhật khác cho màn hình người dùng, chẳng hạn như làm mới chỉ mục của nó hoặc thứ gì đó khác.

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