Эмулирует ли SockJS веб-сокеты даже в браузере, поддерживающем веб-сокеты?

Эмулирует ли SockJS веб-сокеты даже в браузере, поддерживающем веб-сокеты, или нет?

Я пытаюсь использовать websocket и RabbitMQ для отправки и получения сообщений в Интернете. RabbitMQ предоставляет подключаемый модуль rabbitmq-web-stomp, который использует Sockjs для соединения веб-сокета и подключаемого модуля RabbitMQ STOMP.

Но SockJS говорит, что это эмулятор веб-сокета. Поэтому я хочу спросить, будет ли он эмулировать веб-сокет даже в браузере, поддерживающем веб-сокеты.


person Rainman1985    schedule 05.07.2014    source источник


Ответы (1)


Из библиотеки javascript SockJS (выделено мной):

SockJS — это библиотека JavaScript для браузера, предоставляющая объект, подобный WebSocket. SockJS предоставляет вам согласованный кросс-браузерный Javascript API, который создает полнодуплексный междоменный канал связи с малой задержкой между браузером и веб-сервером.

Под капотом SockJS сначала пытается использовать нативные веб-сокеты. Если это не удается, он может использовать различные транспортные протоколы для конкретных браузеров и представлять их через абстракции, подобные WebSocket.

SockJS предоставляет API, подобный веб-сокету, чтобы ваше javascript-приложение думало, что у вас всегда есть веб-сокет, даже если его нет. Легче написать ваше приложение, имея в виду только один транспорт, и позволить чему-то другому эмулировать его, если он отсутствует. Ваш код приложения проще.

SockJS справится с откатами. Он попытается упорядочить эти способы связи, используя первый из поддерживаемых.

[
 'websocket',
 'xdr-streaming',
 'xhr-streaming',
 'iframe-eventsource',
 'iframe-htmlfile',
 'xdr-polling',
 'xhr-polling',
 'iframe-xhr-polling',
 'jsonp-polling'
]

Обратите внимание, что веб-сокет стоит первым. Если ваш браузер поддерживает веб-сокеты, SockJS будет использовать их.

person Bogdan    schedule 05.07.2014