我使用node.js和socket.io。我对socket.io的连接速度有问题。在Internet Explorer和Opera中,我的连接速度有问题。-当我使用手电筒插座或网络插座时。当我使用传输轮询模式时,XHR连接是快速的-在所有浏览器中(IE、FF、Chrome、Opera)。
传输模式-XHR轮询和flash/websocket之间有什么区别?什么是最好的交通方式?如何优化socket.io的连接速度?
谢谢你的建议!
如果不同浏览器之间的连接速度不同,我会感到惊讶,但您在Internet Explorer和Opera中看到初始连接延迟的原因是本地WebSocket支持不可用,因为它在默认情况下被禁用。因此,如果您选择FlashSocket,那么在建立连接之前,需要下载一个额外的Flash对象(SWF文件)。
WebSocket正在IE10和Opera中引入,它们是可用的,但默认情况下是禁用的。
传输模式-XHR轮询和flash/websocket之间有什么区别?
- XHR轮询-请参阅http://en.wikipedia.org/wiki/Push_technology#Long_polling
- FlashSocket连接-使用Flash Socket对象建立与WebSocket服务器的连接,并使用WebSocket协议进行通信。这意味着Flash和JavaScript之间存在交互,也意味着需要下载额外的Flash对象(SWF文件)
什么是最好的交通方式?
用于任何本机支持它的Web浏览器(Chrome、Firefox、Safari)的WebSockets。如果Flash对象(SWF文件)在浏览器缓存中,那么连接应该很快。如果不是这样,那么就会有延迟。XHR长轮询是一个很好的解决方案,可以跨浏览器工作,但也有缺点:
- 在轮询请求之间,显示的数据可能已过期(过时)
- 与WebSockets使用的单个TCP连接相比,这是一种效率较低的连接方法,因为HTTP长轮询使用多个连接来模拟双向功能
- HTTP有一个开销,这意味着在请求和每个后续请求时都会发送额外的头信息
如何优化socket.io的连接速度?
(我对socket还很陌生。这只是一个建议)
我会查看配置Socket.io文档,看看是否可以根据正在连接的浏览器有条件地设置transports
。根据您的经验,这可能是:
- Chrome、Firefox、Safari-WebSockets
- IE,Opera-XHR轮询
要减少连接时间,可以尝试使用"connect timeout"参数来减少连接超时(默认为10秒)。
例如,要将连接超时时间减少到1秒:
socket = io.connect('http://your-site.com',{'connect timeout': 1000});