socket.io - XHR轮询vs flashsocket和websocket

Jen*_*nan 23 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?

感谢您的建议!

leg*_*ter 32

如果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很新,这只是一个建议)

我将查看配置Socket.io文档,看看是否可以transports根据连接的浏览器有条件地设置它.根据您的经验,这可能是:

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

  • @Jenan是的,只要安装了Flash,FlashSocket就可以在IE中运行. (2认同)

les*_*usz 5

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

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

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