socket.io:disconnect事件不会被触发 [英] socket.io: disconnect event isn't fired

查看:5625
本文介绍了socket.io:disconnect事件不会被触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



您可以从这个存储库



发生什么事情是断开连接事件(即使在浏览器关闭后)在服务器上也不会被触发。



server.js是:

 (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 listen on port%d,app.address()。port);
}

})。call(this);

客户端的脚本是:

  script(type ='text / javascript')

var socket = io.connect();

socket.on('count',function(data){
$('#count')。html(data.number);
});


解决方案

将您的断开代码放在连接块上,编辑它有点像这样:

  io.sockets.on('connection',function(socket){
count ++;
io.sockets.emit('count',{
number:count
});

socket.on('disconnect',function() {
console.log('DISCONNESSO !!!');
count--;
io.sockets.emit('count',{
number:count
});
});
});

这样你就可以检测一个特定的套接字(特别是你传递给你的匿名函数的套接字连接运行)断开连接。


I have made a simple realtime visitor counter.

You can download it from this repository.

What happens is that disconnect event (even after browser closing) on server is never fired.

server.js is:

(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 on the client is:

    script(type='text/javascript')

        var socket = io.connect();

        socket.on('count', function (data) {
            $('#count').html( data.number );
        });

解决方案

Put your on disconnect code inside your on connect block and edit it a bit like so:

io.sockets.on('connection', function (socket) {
    count++;
    io.sockets.emit('count', {
        number: count
    });

    socket.on('disconnect', function () {
        console.log('DISCONNESSO!!! ');
        count--;
        io.sockets.emit('count', {
            number: count
        });
    });
});

This way you're detecting when a specific socket (specifically the socket you pass to your anonymous function that is run on connection) is disconnected.

这篇关于socket.io:disconnect事件不会被触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆