我需要知道客户端对nodeJS服务器端的某些条件语句使用什么传输方法。
有谁知道如何获取这些信息?它是否保存在客户端对象中?
答案 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