套接字IO | 如何获得服务器端的客户端传输types?

我需要知道客户端在nodeJS服务器端的某些条件语句使用什么传输方法。

有谁知道我怎么能得到这些信息? 它是否在客户端对象中?

在socket.io 0.7.6

io.sockets.on('connection', function(client) { console.log(io.transports[client.id].name); }); 

从Socket.IO 1.0开始:

客户

 socket.on('connect', function() { console.log(socket.io.engine.transport.name); } 

服务器

 io.sockets.on('connection', function(socket) { console.log(socket.conn.transport.name); } 

2012年4月,这个工程:socket.transport

我相信如果你挖掘客户端对象的内部,你可以find它,虽然不知道为什么你需要这个,我不得不推荐这种检查有两个原因:

首先,由于不在API中,开发人员绝对没有责任保持向后兼容性,所以任何给定的版本都可能以不同的方式实现/存储这些信息,这只会影响到你自己的开发并导致问题。

其次,更重要的是,我build议你重新考虑一下你的devise,通过socket.io与服务器的通信是build立在所使用的方法上的。 两边应该没有区别。 这就是图书馆的目的,devise一个其他行为的应用程序完全正交于这个想法。

为了参考的缘故和谷歌的绊脚石: – 如果任何人仍在使用v0.9(或可能更早),您可以访问这样的信息从客户端这样的:

 var socket = io.connect(); console.log(socket.socket.transport.name); //log the name of the transport being used. 

在google群组https://groups.google.com/forum/#!topic/socket_io/yx_9wJiiAg0find答案

我相信这会解决你的问题。 我的诀窍是一旦客户端连接,将传输types保存在HTTP请求对象上。 您可以稍后在callback中提取。 首先我们调整Listener类:

 var io = require('socket.io'), io.Listener.prototype._onConnectionOld = io.Listener.prototype._onConnection; io.Listener.prototype._onConnection = function(transport, req, res, up, head){ req.socketIOTransport = transport; // Take note of the transport type this._onConnectionOld.call(this, transport, req, res, up, head); }; 

然后在你的应用程序的正文下面:

 var socket = io.listen(app), socket.on('connection', function(client){ console.log(client.request.socketIOTransport); // Lets check that transport // ... }); 

希望这可以帮助!

 io.connect.managers['connect url/port'].engine.transport