socket.io - XHR轮询vs flashsocket和websocket

时间:2012-01-10 09:32:39

标签: websocket socket.io

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

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

感谢您的建议!

2 个答案:

答案 0 :(得分:31)

如果Web浏览器之间连接的一般速度不同,我会感到惊讶,但是你会发现Internet Explorer和Opera中初始连接延迟的原因是本机WebSocket支持不可用因为默认情况下已被禁用。因此,如果选择FlashSocket,则需要在建立连接之前下载其他Flash对象(SWF文件)。

WebSockets正在IE10中引入,在Opera中它们可用,但默认情况下禁用。

  

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

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

什么是最好的交通方式?

任何本机支持它的Web浏览器的WebSockets(Chrome,Firefox,Safari)。如果Flash对象(SWF文件)位于浏览器缓存中,则连接速度应该很快。如果不是那么会有延迟。 XHR Long-Polling是一个很好的解决方案,可以跨浏览器工作,但有负面因素:

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

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

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

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

  • Chrome,Firefox,Safari - WebSockets
  • IE,Opera - XHR-Polling

答案 1 :(得分:5)

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

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

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