Tôi đã thực hiện một bộ đếm khách truy cập thời gian thực đơn giản.socket.io: ngắt kết nối sự kiện không được kích hoạt
Bạn có thể tải xuống từ this repository.
Điều gì xảy ra là sự kiện ngắt kết nối (ngay cả sau khi trình duyệt đóng) trên máy chủ sẽ không bao giờ được kích hoạt.
server.js là:
(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);
Script trên máy khách là:
script(type='text/javascript')
var socket = io.connect();
socket.on('count', function (data) {
$('#count').html(data.number);
});
Bạn có nhận thấy rằng tôi đã viết socket.on ở trên không? – swiecki
Tuyệt vời, bây giờ nó hoạt động tốt –
FYI, nếu xhr-polling đang được sử dụng cho việc vận chuyển, có thể có khá chậm trễ trước khi ngắt kết nối. –