Sorununuz soket zaman aşımları hakkında. Belirli bir sokette etkinlik yoksa, socket.io otomatik olarak kapanır.
Kolaylık (ve hackish) düzeltmesi, etkinlik oluşturmak ve soketin zaman aşımını durdurmak için bağlı istemciye bir kalp atışı göndermektir.
Sunucu:
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);
Müşteri:
Sen socket.io
here.
EDIT yapılandırma hakkında daha fazla bilgi alabilirsiniz
:
Fazla Bilgi
socket.on('ping', function(data){
socket.emit('pong', {beat: 1});
});
Mark yorumladı ki eğer kullanıcı bağlantıyı kaybeder (bağlantı onun üzerine düşer İnternet sorunları nedeniyle sonlandırın), kullanıcıyı son durumuna geri yükleyebilmeniz gerekir.
Bunu yapmak için, en iyi yol kullanıcı verilerini, çerezleri ve oturumları depolamak için halihazırda yaygın olarak kullanılan bir yöntem kullanmak olacaktır.
Bu located here'un nasıl yapılacağı hakkında son derece iyi hazırlanmış bir eğiticidir. Kurabiyeleri ayarlamak için express kullanmasına rağmen, bunu herhangi bir şey kullanarak yapabilirsiniz (rayları kullanarak yapıyorum). Bu yöntemi kullanarak, kullanıcı verilerini bir çerezde saklayabilir ve el sıkışması sırasında getirebilirsiniz. Buradan socket.handshake.data
'u kullanarak verilere erişebilirsiniz.
Oldukça akıllı bir çözüm, teşekkürler :) –
Bu akıllı bir çözümdür ancak sunucu ve istemci ping pong ile meşgul tutacaktır :-(başka bir çözüm? –