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逻辑。