【问题标题】:socket.io - XHR polling vs flashsocket and websocketsocket.io - XHR 轮询与 flashsocket 和 websocket
【发布时间】:2012-02-06 17:32:59
【问题描述】:

我使用 node.js 和 socket.io。 我对 socket.io 的连接速度有疑问。 在 Internet Explorer 和 Opera 中,我的连接速度有问题。 - 当我使用 flashsocket 或 websocket 时。 当我使用传输轮询模式时,XHR 连接速度很快 - 在所有浏览器(IE、FF、Chrome、Opera)中。

传输模式 - XHR-polling 和 flash / websocket 有什么区别? 最好的交通方式是什么? socket.io是如何优化连接速度的?

感谢您的建议!

【问题讨论】:

    标签: websocket socket.io


    【解决方案1】:

    如果网络浏览器之间的一般连接速度随时间变化,我会感到惊讶,但您会在 Internet Explorer 和 Opera 中看到初始连接延迟的原因是本机 WebSocket 支持不可用因为它默认被禁用。因此,如果您选择 FlashSocket,则需要在建立连接之前下载一个额外的 Flash 对象(SWF 文件)。

    在 IE10 和 Opera 中引入了 WebSocket,它们可用,但默认禁用。

    传输方式-XHR-polling和flash/websocket有什么区别?

    • XHR 轮询 - 请参阅 http://en.wikipedia.org/wiki/Push_technology#Long_polling
    • FlashSocket 连接 - 使用 Flash Socket 对象建立到 WebSocket 服务器的连接并使用 WebSocket 协议进行通信。这意味着 Flash 和 JavaScript 之间存在交互,也意味着需要下载额外的 Flash 对象(SWF 文件)。

    最好的交通方式是什么?

    WebSockets 适用于任何原生支持它的 Web 浏览器(Chrome、Firefox、Safari)。如果 Flash 对象(SWF 文件)在浏览器缓存中,那么连接应该很快。如果不是,那么就会有延迟。 XHR Long-Polling 是一个很好的解决方案,可以跨浏览器工作,但也有负面影响:

    • 在轮询请求之间,显示的数据可能已过期(陈旧)。
    • 与 WebSockets 使用的单个 TCP 连接相比,这种连接方法效率较低,因为 HTTP 长轮询使用多个连接来模拟双向功能
    • HTTP 有一个开销,这意味着在请求和每个后续请求时都会发送额外的标头信息。

    socket.io如何优化连接速度?

    (我对 socket.io 很陌生,这只是一个建议)

    我会查看configuring Socket.io docs,看看您是否可以根据正在连接的浏览器有条件地设置transports。根据您的经验,这可能是:

    • Chrome、Firefox、Safari - WebSockets
    • IE、Opera - XHR 轮询

    【讨论】:

    • 我可以在 IE 中设置 flashsocket 吗?它可以与 IE 一起使用 flashsocket 吗?
    • @Jenan 是的,只要安装了 Flash,FlashSocket 就应该在 IE 中工作。
    【解决方案2】:

    要减少连接时间,可以尝试使用“连接超时”参数来减少连接超时(默认为10秒)。

    例如,将连接超时减少到 1 秒:

    socket = io.connect('http://your-site.com',{'connect timeout': 1000});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2011-10-16
      相关资源
      最近更新 更多