2014-09-03 90 views
0

您好,我目前正在研究某種「聊天」系統。socket.io在發送到特定客戶端後斷開連接NODE javascript

服務器:用的NodeJS快遞 - HTTPS 通訊:[email protected]

客戶端:

var socket = io.connect(); 
socket.emit('HELLO', {user:'someuserid'}); 
socket.on('WELCOME', function(data){ 
    socket.emit('REGISTER', {}); 
}); 
socket.on('SIGNED', function(data){ 
    console.log(data.user); 
    socket.emit('GO', {}); 
}); 
socket.on('message', function(data){ 
    console.log(data.somedata); 
}); 

服務器:

io.sockets.on('connection', function(socket){ 
    socket.on('HELLO', function(data){ 
     socket.user = data.user; 
     socket.emit('WELCOME', socket.user); 
    }); 
    socket.on('REGISTER', function(data){ 
     console.log('room: '+socket.user); 
     socket.join(socket.user); 
     socket.emit('SIGNED', socket.user); 
     console.log('SIGNED IN: '+socket.user); 

    }); 
    socket.on('GO', function(data){ 
     //some logic happens where a list of users gets loaded 
     //which is identical to the socket.user and its room 
     //... loop 
     io.in(partners[i].user).emit('message', { somedata: 'asd' }); 
    } 

    socket.on('disconnect' ..... blaaa blaa) 

所以,basicly我想在這裏做是通過向特定房間發送消息來創建一種解決方法,以便將消息發送給特定用戶。

此:

io.in(partners[i].user).emit('message', { somedata: 'asd' }); 

和此:

partners[i].socket.emit('message', { somedata: 'asd' }); 

結果在相同的:

room: 540246a3e4b0a64a28e1ec59 
SIGNED IN: 540246a3e4b0a64a28e1ec59 
room: 540504ba0b526b274398480e 
SIGNED IN: 540504ba0b526b274398480e 
to: 540246a3e4b0a64a28e1ec59 
disconnected:540246a3e4b0a64a28e1ec59 

用戶寄存器,獲取連接並希望發出一個消息給特定chatpartners在陣列合作伙伴[我]。

一旦EMIT被激發用戶,假設該消息被髮射到斷開......

我究竟做錯了什麼?

(腳本顯然是不完整的。我貼的最重要的部分)

感謝您的幫助。

回答

1

我覺得我已經找到了解決方案:

有時使用谷歌比自己調試更費力。

滾動瀏覽firefox中的調試日誌後,我發現這個問題實際上與我的套接字'消息'處理程序中的代碼有關。一個片段,可以幫助他人找到錯誤與他們的插座:

socket.on('error', function (err) { 
    if (err.description) throw err.description; 
    else throw err; // Or whatever you want to do 
}); 

我覺得這是一個問題socket.io 雖然這是我的錯編碼 - socket.io的ErrorHandler應該已經過去了,通過。

玩得開心

相關問題