套接字IO |如何在服务器端获取客户端传输类型?

时间:2011-06-08 14:54:44

标签: javascript node.js socket.io

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

有谁知道如何获取这些信息?它是否保存在客户端对象中?

7 个答案:

答案 0 :(得分:22)

从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);
}

答案 1 :(得分:7)

在socket.io 0.7.6

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

答案 2 :(得分:7)

2012年4月,这有效:socket.transport

答案 3 :(得分:3)

我确信你可以找到它,如果你挖掘客户端对象的内部,虽然不知道为什么你需要这个我必须建议反对这种检查有两个原因:

首先,由于它不在API中,开发人员完全没有责任保持向后兼容,因此任何给定版本都可能以不同方式实现/存储该信息,这只会影响您自己的开发并导致问题。 / p>

其次,更重要的是,我建议你重新考虑你的设计,通过socket.io与服务器的通信被构建为透明到正在使用的方法。任何一方都应该没有区别。这就是图书馆的目的,设计一个行为不同的应用程序与该想法完全正交。

答案 4 :(得分:1)

供参考,谷歌绊倒: - 如果有人还在使用v0.9(或可能更早) 您可以从客户端访问此信息,如下所示:

var socket = io.connect();
console.log(socket.socket.transport.name); //log the name of the transport being used.
在谷歌小组https://groups.google.com/forum/#!topic/socket_io/yx_9wJiiAg0

上找到答案

答案 5 :(得分:0)

我相信这会解决你的问题。我的诀窍是在客户端连接后将传输类型保存在HTTP Request对象上。然后,您可以稍后在回调中接听它。首先我们调整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
    // ...
});

希望这有帮助!

答案 6 :(得分:0)

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