即使在支持websockets的浏览器上,SockJS也能模拟websockets吗?



SockJS是否在支持websocket的浏览器上模拟websocket ?

我正在尝试使用websocket和RabbitMQ在web上发送和接收消息。RabbitMQ提供了一个rabbitmq-web-stomp插件,它使用Sockjs来连接websocket和RabbitMQ STOMP插件。

但是SockJS说它是一个websocket模拟器。所以我想问它是否会模拟websocket甚至在浏览器上支持websocket。

来自SockJS javascript库(重点是我的):

SockJS是一个浏览器JavaScript库,它提供了一个类似websocket的对象。SockJS为你提供了一个连贯的、跨浏览器的Javascript API,它在浏览器和web服务器之间创建了一个低延迟、全双工、跨域的通信通道。

底层SockJS首先尝试使用本地WebSockets 。如果失败,它可以使用各种浏览器特定的传输协议,并通过类似websocket的抽象来呈现它们。

SockJS暴露了一个类似于websocket的API,使你的javascript应用程序认为你总是有一个websocket,即使你没有。在编写应用程序时,只考虑一种传输方式,如果缺少传输方式,让其他东西来模拟它,这样会更容易。您的应用程序代码更简单了。

SockJS将处理回退。它将按顺序尝试这些通信方式,使用支持的第一种方式。

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

注意web套接字优先。如果你的浏览器支持web sockets, SockJS会使用它。

最新更新