2014-06-24 99 views
0

我使用插座IO用一個簡單的令牌AUTH方法(服務器端):Socket.io失敗授權不重試重新連接

io.use(function(socket, next){ 

var handshake = socket.request; 
if(token == handshake._query.token) 
{ 
    console.log('Client authorized'); 
    next(); 
} 
else 
{ 
    console.log('Client not authorized'); 
    next(new Error('not_authorized')); 
    socket.disconnect(); 
} 

});

問題是,如果客戶端第一次授權失敗(錯誤的令牌),它不會再次嘗試連接,即使我發送手動新連接,它也不會重新連接,直到整個頁面刷新。 Cliend方:

var socket = io.connect(this.adress, {query: 'token=123456789', transports:['websocket', 'polling'] }); 
socket.on('error', function(err){ 
       console.log(err); 
       if(err == 'not_authorized') 
       { 

        console.log('gettin toke');//NOT ENTERING HERE 
       } 
       PS.connected = false; 
      }); 

我如何可以重試與其他參數重新連接?

解決辦法,設置這個變量againg重試連接:

   PS.socket.socket.connecting = false; 
       PS.socket.socket.options.query = 'token='+tok; 

回答

0

按照documentation sample你不應該使用socket.disconnect();。由於此線路,您的客戶端error事件不會發射。

編輯:

你也可以嘗試設置forceNewtrue在連接選項重新連接時:

var socket = io.connect(this.adress, { 
    query: 'token=123456789', 
    transports:['websocket', 'polling'], 
    forceNew: true 
}); 
+0

即使去除沒有解決的問題。看起來,當授權失敗時,連接不能再重試。 – albanx

+0

我找到了解決方案。看看我的編輯 – Curious

+0

我測試過,它不起作用,我發現0.9版的解決方法。在編輯中 – albanx