Socket IO|如何在服务器端获取客户端传输类型

Socket IO | How to get the client transport type on the serverside?

本文关键字:获取 客户端 传输 类型 服务器端 IO Socket      更新时间:2023-09-26

我需要知道客户端在nodeJS服务器端使用什么传输方法来处理一些条件语句

有人知道我怎样才能得到这些信息吗?它是否保存在客户端对象中?

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

插座内。io 0.7.6

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

2012年4月,这项工作:socket.transport

我相信,如果你深入了解客户端对象的内部,你可以找到它,尽管在不知道为什么需要这样做的情况下,我不得不建议你不要进行这种检查,原因有两个:

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

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

为了参考和谷歌的失误:-以防有人仍在使用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

我相信这将解决您的问题。我的技巧是在客户端连接后将传输类型保存在HTTPRequest对象上。然后您可以稍后在回拨中提取它。首先我们调整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