2012-08-04 94 views
4

服务器代码:socket.io客户端无法获得授权失败的原因

//run with node-dev server.js 
var remoteServer = io.of('/remote'); 
remoteServer.authorization(function(handshakeData, callback){ 
    return callback('unknown clientType', false); 
} 

服务器日志:

You can visit your app with http://localhost:3000 
    info - handshake authorized l4FzYiWpHo2d8VeoB3Zo 
    warn - handshake error unknown clientType for /remote 

客户端代码:

//run with node-dev client.js 
var io = require('socket.io/node_modules/socket.io-client'); 
var client = io.connect('http://localhost:3000/remote'); 
client.on('connect_failed', function(reason){ 
    console.log('connect_failed:', reason); 
}); 

//will call this because it's Namespace authorization 
client.on('error', function(reason){ 
    console.log('error:', reason); 
}); 

客户端日志:

//error reason miss. 
E:\Workspace\TZ\SmartDoor\client>node-dev client.js 
error: 
+0

阅读后src和测试,发现授权不允许自定义错误味精,只有回调(空,假的),然后客户端有:“错误:未授权” – atian25 2012-08-04 10:00:09

+0

现在,我应该删除这个问题还是近?哪个操作 – atian25 2012-08-04 10:01:53

+0

那么我怎么能告诉客户端授权更多细节失败msg? – atian25 2012-08-04 10:05:58

回答

1

在Socket.IO authorization中间件基于HTTP头的数据来处理的握手过程即在WebSocket的情况下与第一个HTTP交换协议头一起发送。

此数据包含正常的头的东西,以及饼干和用于有时恢复会话。
虽然authorization中间件发生之前实际的WebSockets握手过程已经完成,而这个中间件不应该被用于应用程序逻辑的授权,但仅限于网络和HTTP的东西(如饼干恢复会话,禁止IP等)。因为它实际上是协议特定的(Socket.IO使用许多协议和通信层,例如WebSockets,XHR Long Polling,AJAX等),所以我会推荐不使用这个中间件来实现应用程序逻辑。但是在连接成功建立之后请确认你的验证逻辑。