【问题标题】:Websocket vs SockJS objectWebsocket 与 SockJS 对象
【发布时间】:2018-10-10 02:18:59
【问题描述】:

我想知道为什么您可以使用以下方法初始化普通的 javascript websocket:

 var socket = new WebSocket('ws://example.com/myprefix')

但是使用 SockJS 你需要调用一个普通的 http(s) url:

var sock = new SockJS('https://example.com/my_prefix');

为什么 SockJS 不允许“正常”的 ws url?

【问题讨论】:

    标签: javascript websocket sockjs


    【解决方案1】:

    ws:开头的websocket协议在RFC6455中定义。

    虽然该协议的未来实现可能会获得用于安全和非安全流量的专用端口号,但目前(2018 年)该协议是通过发出带有升级标头的 HTTP 请求以将协议更改为 WS 来启动的。 (参考123)。

    使用 websockets 和 ws 协议需要客户端支持 websockets API 和服务器支持协议升级标头和 websocket 通信。

    SockJS 就像 websockets 的 pollyfill,如果 websockets 不可用,它将回退到可用的通信通道。根据 readme.md 文件,

    “SockJS 旨在为所有现代浏览器和不支持 WebSocket 协议的环境工作——例如,在限制性公司代理后面。

    websockets 和 SockJS 都需要服务器支持。例如。对于节点,wsSockJS for node。 SockJS 的 readme.md 文件声明服务器将使用 ws: 协议头接受原始请求,但没有提及在哪个端口上。

    如果客户端请求不接受 ws URL,我建议假设它是围绕发出初始 HTTP/HTTPS 请求以确定支持的假设编写的。也许更新请求可能会扩展 URL 中接受的协议!

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 2018-05-05
      • 2017-08-23
      • 2021-08-27
      • 2017-05-03
      • 1970-01-01
      • 2017-06-05
      • 2016-05-02
      相关资源
      最近更新 更多