2011-06-08 18 views

Respuesta

7

En socket.io 0.7.6

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

Estoy seguro de que puede encontrar si cavar en la parte interna de un objeto cliente, aunque sin saber por qué necesita este tengo que recomendar en contra de este tipo de cheque por 2 razones:

En primer lugar, ya no está en la API, los desarrolladores no tienen ninguna responsabilidad de mantener las cosas compatibles con versiones anteriores, por lo que cualquier versión dada podría implementar/almacenar esa información de manera diferente, lo que solo afectará su propio desarrollo y causará problemas.

En segundo lugar, y más importante, sugiero que reconsidere su diseño, la comunicación con el servidor a través de socket.io está diseñada para ser transparente con el método que se está utilizando. No debería haber diferencia en ninguno de los lados. Ese es el propósito de la biblioteca, diseñar una aplicación que se comporte de otra manera es totalmente ortogonal a esa idea.

+0

Este es el motivo por el que quiero saber el tipo de transporte http://stackoverflow.com/questions/6280569/socket-io-xhr-polling-delay-on-disconnection – wilsonpage

+0

@davin Después de excavar a través de las partes internas no es posible en realidad . – Raynos

+1

@Raynos, pensé que recordaba haber visto una propiedad 'url' en alguna parte del objeto cliente (o un subobjeto), ¿no podría sacarla de allí usando las mismas convenciones que usa la biblioteca? – davin

0

Creo que esto resolverá su problema. Mi truco aquí es guardar el tipo de transporte en el objeto HTTP Request una vez que el cliente se conecta. Luego puede recuperarlo en su devolución de llamada más tarde. En primer lugar nos ajustamos a la clase 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); 
}; 

Y luego más adelante en el cuerpo de su aplicación:

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

Espero que esto ayude!

7

Abril de 2012, esto funciona: socket.transport

21

A partir de Socket.IO 1.0:

cliente:

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

Servidor :

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

Solo para confirmar: ambos aún funcionan con 1.3.6 –

1

por el amor de referencia y Google tropieza: - por si alguien sigue utilizando v0.9 (o posiblemente antes) puede acceder a esta información desde el lado del cliente como esto:

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

respuesta encontrada en los grupos de google https://groups.google.com/forum/#!topic/socket_io/yx_9wJiiAg0

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