He creado un contador de visitantes en tiempo real simple.socket.io: el evento de desconexión no se ha activado
Puede descargarlo desde this repository.
Lo que sucede es que el evento de desconexión (incluso después del cierre del navegador) en el servidor nunca se activa.
server.js es:
(function() {
var app, count, express, io;
express = require('express');
io = require('socket.io');
app = module.exports = express.createServer();
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(require('stylus').middleware({
src: __dirname + '/public'
}));
app.use(app.router);
return app.use(express.static(__dirname + '/public'));
});
app.configure('development', function() {
return app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
app.configure('production', function() {
return app.use(express.errorHandler());
});
io = require('socket.io').listen(app);
count = 0;
io.sockets.on('connection', function (socket) {
count++;
io.sockets.emit('count', {
number: count
});
});
io.sockets.on('disconnect', function() {
console.log('DISCONNESSO!!! ');
count--;
io.sockets.emit('count', {
number: count
});
});
app.get('/', function (req, res) {
return res.render('index', {
title: 'node.js express socket.io counter'
});
});
if (!module.parent) {
app.listen(10927);
console.log("Express server listening on port %d", app.address().port);
}
}).call(this);
de secuencias de comandos en el cliente es:
script(type='text/javascript')
var socket = io.connect();
socket.on('count', function (data) {
$('#count').html(data.number);
});
¿Notaste que he escrito socket.on arriba? – swiecki
Perfecto, ahora funciona bien –
FYI, si xhr-polling se utiliza para el transporte, puede haber un gran retraso antes de la desconexión. –