与socket.io简单聊天

时间:2013-06-25 06:37:09

标签: node.js socket.io

我正在尝试与socket.io进行一次非常简单的聊天,而且我遇到了一个非常奇怪的问题。

服务器端:

var users = {};

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

socket.on('join', function(userNameParam) {
    socket.join('chatchannel');
    users[userNameParam] = userNameParam;
    socket.userName = userNameParam;
    socket.emit('firstLogin',users);
    socket.broadcast.to('chatchannel').emit('addConnectedUser',userNameParam);
});
});

客户方:

var socket = io.connect();

    function onLogInLogOutClick() {         
            var userName = document.getElementById("txtUserName").value;            

            // get button text
            var btnLogInLogOut = document.getElementById('btnLogInLogOut');
            var txtBtnLogInLogOut = btnLogInLogOut.textContent || btnLogInLogOut.innerText;
            if(txtBtnLogInLogOut == 'LogIn')
            {
                // send join message
                socket.emit('join', userName);
            }
}

当我登录第一个浏览器选项卡(对于第一个用户)时,一切都很好,但是当我登录第二个浏览器选项卡(对于第二个用户)时,由于某些未知原因,服务器端的“加入”事件得到不止一次打电话!

我已经在API上读到'socket.emit'假设只为当前请求套接字客户端引发事件,那么问题是什么呢?

更新

我在第一次和第二次调用时查看了socket.id,它是一样的。为什么会这样?

更新2:

在第二个选项卡上,当到达服务器端时,我看到请求套接字正在为每个事件订阅TWICE。 我不知道为什么。

更新3:

发现问题:服务器代码放在这里:

module.exports = function(app, socketio, loggerInstance) {
  io = socketio;
  app.get('/chat',chat);
};
var chat = function(req, res){

    *** SERVER CODE THAT WAS WRITTEN ABOVE ***

    res.render('chat');
};

我将服务器代码移动到'app.js'文件,它运行正常。

我仍然无法弄清楚为什么这些事件不止一次被召唤。

0 个答案:

没有答案