socket.io: el evento de desconexión no se activa
He hecho un simple contador de visitantes en tiempo real.
Puedes descargarlo desdeeste repositorio.
Lo que sucede es que el evento de desconexión (incluso después de cerrar el navegador) en el servidor nunca se activa.
server.js es:
<code>(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); </code>
El script en el cliente es:
<code> script(type='text/javascript') var socket = io.connect(); socket.on('count', function (data) { $('#count').html( data.number ); }); </code>