Sự cố của bạn sắp hết thời gian chờ của ổ cắm. Nếu không có hoạt động nào trên một ổ cắm nào đó, socket.io sẽ tự động đóng nó.
Khắc phục dễ dàng (và hack) là gửi nhịp tim cho khách hàng được kết nối để tạo hoạt động và dừng ổ cắm khỏi thời gian chờ.
Server:
function sendHeartbeat(){
setTimeout(sendHeartbeat, 8000);
io.sockets.emit('ping', { beat : 1 });
}
io.sockets.on('connection', function (socket) {
socket.on('pong', function(data){
console.log("Pong received from client");
});
}
setTimeout(sendHeartbeat, 8000);
Chủ đầu tư:
socket.on('ping', function(data){
socket.emit('pong', {beat: 1});
});
biết thêm thông tin:
Bạn có thể tìm thêm thông tin về cấu hình socket.io here.
EDIT: Mark nhận xét rằng nếu người dùng sẽ mất kết nối (kết nối giảm xuống kết thúc vì sự cố internet), bạn sẽ có thể khôi phục người dùng về trạng thái cuối cùng của mình.
Để làm điều đó, cách tốt nhất là sử dụng phương pháp đã được sử dụng rộng rãi để lưu trữ dữ liệu người dùng, cookie và phiên.
Hướng dẫn thực hiện rất tốt về cách thực hiện điều này located here. Mặc dù ông sử dụng Express để thiết lập các tập tin cookie, bạn có thể làm điều này bằng cách sử dụng bất cứ điều gì (tôi làm điều đó bằng cách sử dụng đường ray). Sử dụng phương pháp này, bạn có thể lưu trữ dữ liệu người dùng trong cookie và tìm nạp nó trong quá trình bắt tay. Từ đó bạn chỉ có thể truy cập dữ liệu bằng cách sử dụng socket.handshake.data
.
Giải pháp khá thông minh, cảm ơn bạn :) –
Đây là giải pháp thông minh nhưng nó sẽ giữ máy chủ và khách hàng bận rộn với ping pong :-(bất kỳ giải pháp nào khác? –