socket.io - опрос XHR против flashsocket и websocket - PullRequest
22 голосов
/ 10 января 2012

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

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

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

Ответы [ 2 ]

31 голосов
/ 11 января 2012

Я был бы удивлен, если бы общая скорость соединения с течением времени отличалась между веб-браузерами, но причина, по которой вы увидите задержку начального соединения в 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 и посмотрел, можно ли условно установить transports в зависимости от подключаемого браузера.Исходя из вашего опыта, это может быть:

  • Chrome, Firefox, Safari - WebSockets
  • IE, Opera - XHR-опрос
5 голосов
/ 11 октября 2012

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

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

socket = io.connect('http://your-site.com',{'connect timeout': 1000});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...