Мне нужно знать, какой транспортный метод используется клиентом для некоторых условных операторов на сервере nodeJS.
Кто-нибудь знает, как я могу получить эту информацию? Поддерживается ли он внутри объекта клиента?
Мне нужно знать, какой транспортный метод используется клиентом для некоторых условных операторов на сервере nodeJS.
Кто-нибудь знает, как я могу получить эту информацию? Поддерживается ли он внутри объекта клиента?
В socket.io 0.7.6
io.sockets.on('connection', function(client) {
console.log(io.transports[client.id].name);
});
Как по Socket.IO 1.0:
Client
socket.on('connect', function() {
console.log(socket.io.engine.transport.name);
}
Сервер
io.sockets.on('connection', function(socket) {
console.log(socket.conn.transport.name);
}
Апрель 2012, это работает: socket.transport
Я уверен, что вы можете найти его, если вы копаете внутренности объекта клиента, хотя, не зная, зачем вам это нужно, я должен рекомендовать против такого рода проверки по двум причинам:
Во-первых, поскольку он не входит в API, разработчики не несут никакой ответственности за совместимость вещей, поэтому любая данная версия может реализовать/хранить эту информацию по-разному, что будет только пульсировать в вашей собственной разработке и вызывать проблемы.
Во-вторых, и что более важно, я предлагаю вам переосмыслить свой дизайн, связь с сервером через socket.io строится так, чтобы быть прозрачным для используемого метода. Не должно быть никакой разницы с обеих сторон. То, что цель библиотеки, создавая приложение, которое ведет себя иначе, полностью ортогонально этой идее.
для справки, и google спотыкается: - в случае, если кто-то все еще использует 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_9wJiiAg0
Я считаю, что это решит вашу проблему. Мой трюк здесь заключается в том, чтобы сохранить тип транспорта в объекте HTTP-запроса после подключения клиента. Затем вы можете забрать его в своем обратном вызове позже. Сначала мы настраиваем класс 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