socket.io-client无法获取授权失败的原因

  • socket.io@0.9.9
  • socket.io-client@0.9.9
  • express@3.0.0rc1

服务器代码:

//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: 

Socket.IO中的authorization中间件 ,用于处理基于HTTP Header数据的握手过程,在WebSocket的情况下,使用第一个HTTP开关协议标头发送数据。

这些数据包含正常的头文件以及cookie,有时用于恢复会话。
虽然authorization中间件发生在实际的WebSockets握手过程完成之前,并且这个中间件不应该用于应用程序逻辑授权,而只能用于networking和http的东西(如用于恢复会话的cookie,禁止的IP等)。

所以我会build议不要使用这个中间件来实现应用程序逻辑,因为它实际上是协议特定的(Socket.IO使用许多协议和通信层,比如WebSockets,XHR Long Polling,AJAX等)。 但是在连接成功build立之后,请确认您的validation逻辑。