Определение типов транспорта на стороне клиента
Мне нужно использовать jsonp-опрос для IE и xhr-опрос для Firefox, поэтому я
попытался определить типы транспортов на стороне клиента следующим образом:
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
var socket = io.connect(VG.NODE_SERVER_URL,{
transports:['xhr-polling']
});
} else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
var socket = io.connect(VG.NODE_SERVER_URL,{
transports:['jsonp-polling']
});
} else {
var socket = io.connect(VG.NODE_SERVER_URL);
}
Я протестировал его на Firefox и добавил запись в socket.io-client lib.
В
https://github.com/LearnBoost/socket.io-client/blob/master/dist/socket.io.js#L1509
option.transports ["xhr-polling", "flashsocket", "htmlfile",
"xhr-polling", "jsonp-polling"]
, что является правильным. Однако при
https://github.com/LearnBoost/socket.io-client/blob/master/dist/socket.io.js#L1679
Я не знаю, почему транспорты меняются на ["htmlfile", "jsonp-
polling", "xhr-polling"]
, который имеет ту же последовательность, что и я
определенных на стороне сервера.
Почему он не использует предыдущий вариант?
Ответы
Ответ 1
Ошибка теперь исправлена в версии socket.io 0.9.6, я могу использовать ее, и она отлично работает:
socket = io.connect(HOST_REMOTE, {
transports: ['xhr-polling']
});
В версии 1.0.0 и выше:
socket = io.connect(HOST_REMOTE, {
transports: ['polling']
});
Ответ 2
есть ошибка в socket.io.client.
поэтому вы не можете устанавливать транспорты в клиенте...
function Socket (options) {
this.options = {
port: 80
, secure: false
....
};
io.util.merge(this.options, options);
....
};
должен быть io.util.merge(this.options, options,0);....