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会使用它。