Подтвердить что ты не робот

Socket.io - опрос XHR vs flashsocket и websocket

Я использую node.js и socket.io. У меня проблема со скоростью соединения с socket.io. В Internet Explorer и Opera у меня проблема со скоростью подключения. - Когда я использую flashsocket или websocket. Когда я использую режим транспорта-опроса, соединение XHR выполняется быстро - во всех браузерах (IE, FF, Chrome, Opera).

В чем разница между режимом транспорта - XHR-опросом и flash/websocket? Каков наилучший способ транспортировки? Как оптимизировать скорость соединения является socket.io?

Спасибо за совет!

4b9b3361

Ответ 1

Я был бы удивлен, если бы общая скорость соединения в течение времени была разной между веб-браузерами, но причина, по которой вы увидите задержку в первоначальном подключении в Internet Explorer и в Opera, заключается в том, что встроенная поддержка WebSocket недоступна поскольку он был отключен по умолчанию. Таким образом, если вы выберете FlashSocket, перед созданием соединения необходимо будет загрузить дополнительный Flash-объект (SWF файл).

WebSockets вводятся в IE10, а в Opera они доступны, но по умолчанию отключены.

В чем разница между режимом транспорта - XHR-опросом и flash/websocket?

  • XHR-опрос - см. http://en.wikipedia.org/wiki/Push_technology#Long_polling
  • Соединение FlashSocket - использует объект Flash Socket для установления соединения с сервером WebSocket и обменивается данными с использованием протокола WebSocket. Это означает, что есть взаимодействие между Flash и JavaScript, а также означает, что необходимо загрузить дополнительный Flash-объект (файлы SWF).

Каков наилучший способ транспортировки?

WebSockets для любого веб-браузера, который изначально поддерживает его (Chrome, Firefox, Safari). Если Flash-объект (SWF файл) находится в кеше браузера, соединение должно быть быстрым. Если это не так, произойдет задержка. XHR Long-Polling - хорошее решение и будет работать в браузере, но есть негативы:

  • между запросами опроса данные на дисплее могут быть устаревшими (устаревшие).
  • Это менее эффективный метод подключения, чем одно TCP-соединение, используемое WebSockets, поскольку HTTP Long-Polling использует множественное соединение для имитации двунаправленной функциональности.
  • HTTP имеет служебные данные, что означает, что дополнительная информация заголовка отправляется по запросу и каждому последующему запросу.

Как оптимизировать скорость соединения является socket.io?

(Я новичок в socket.io, это всего лишь предложение)

Я бы посмотрел конфигурацию Socket.io docs и посмотрел, можно ли условно установить transports на основе браузера, который подключения. Основываясь на ваших опытах, это может быть:

  • Chrome, Firefox, Safari - WebSockets
  • IE, Opera - XHR-опрос

Ответ 2

Чтобы сократить время соединения, вы можете попытаться уменьшить таймаут соединения (который по умолчанию равен 10 секундам), используя параметр "время ожидания подключения".

Например, чтобы сократить время ожидания подключения до 1 секунды:

socket = io.connect('http://your-site.com',{'connect timeout': 1000});