1

我一直在尝试制作一个使用 Socket.io 中的房间的基本通知系统。但是,由于某种原因,它仅在您每隔一次刷新页面时才有效。

我已经简化了代码以使其更易于调试,但问题仍然存在。每次我刷新页面时,除了加入一个房间(只工作一半)之外,一切似乎都正常。会发生什么?

编辑:我正在使用 Socket.io 版本 1.1.0 和 Node.js 版本 0.10.31 编辑2:添加了 FunnyLookinHat 的建议(但它仍然没有解决问题)

客户端代码:

socket = io.connect('example.com:8081'),

socket.on('connect', function () {
    socket.on('startup', function(data) {
        console.log(data.message);
    });
    socket.emit('joinRoom');
});

服务器端代码:

var io = require('socket.io').listen(8081);

io.sockets.on('connection', function (socket) {

    console.log(socket.id + ' connected!');

    socket.emit('startup', { message: 'Socket started!' });

    socket.on('joinRoom', function(){
        console.log(socket.id + ' joining room lobby'); // prints on every other request
        socket.join('lobby');
    });

    socket.on('disconnect', function() {
        console.log(socket.id + ' disconnected!');
    });

});

客户端控制台:

Socket started!

(refreshed page)

Socket started! 

服务器控制台:

UIBqVuOiF1fegMIMAAAB connected!
UIBqVuOiF1fegMIMAAAB joining room lobby
UIBqVuOiF1fegMIMAAAB disconnected!

(refreshed page)

x3nMilBOjjFVjBFJAAAC connected!

(after about a minute once the client window has been closed or refreshed)

x3nMilBOjjFVjBFJAAAC disconnected!
4

1 回答 1

2

比赛条件!尝试在您的客户端代码中执行以下操作:

socket = io.connect('example.com:8081'),

socket.on('connect', function () {
    socket.on('startup', function(data) {
        console.log(data.message);
    });

    socket.emit('joinRoom');
});
于 2014-09-07T14:09:29.600 回答