IE和Socket.io的兼容性问题

6
我制作了一个类似这里的聊天示例:http://psitsmike.com/2011/09/node-js-and-socket-io-chat-tutorial/ 在Chrome和Firefox中,一切都很顺利。但是在IE9或Opera中,一些socket.io事件无法触发(例如disconnect),或者触发得太晚,数据接收得太慢。
我使用npm方法安装了node.js和socket.io模块。请帮忙解决。
1个回答

9

Socket.IO最适合使用WebSockets。在2012年之前,大多数浏览器都不支持WebSockets (来源)。

对于这样的浏览器,socket.io会退回到各种轮询方法,但这可能会导致您遇到的问题,例如低数据传输速率和延迟事件(1-2分钟后才触发)。为了解决这个问题,您可以尝试启用Flash Sockets。

 io.set('transports', [
     'websocket'
   , 'flashsocket'
   , 'htmlfile'
   , 'xhr-polling'
   , 'jsonp-polling'
 ]);

同时,请确保客户端能够访问Flash策略文件的端口(默认为10843)。


"htmlfile" 是 IE 的 ActiveX 方式。 - jwchang
3
当我尝试这样做时,io对象没有'set'方法。这是在客户端,在包含socket.io.js之后。 - Khior
谢谢你的帮助,Martin。我的问题是IE9在点击刷新时导致读取错误ECONNRESET。现在它可以正确地触发断开连接并立即终止我的用户。Khior - 我在服务器端文件中完成了这个操作,在要求socket.io之后直接进行。 - Warren Sergent
小修改:大多数2012年之前的浏览器都不支持WebSockets,不仅仅是Opera。第一批支持WebSockets的浏览器包括IE 10(2012年9月),Firefox 11(2012年1月),Chrome 16(2011年10月),Safari 7(2013年10月),Opera 12(2012年11月),iOS 6(2013年1月)和Android 4.4(2013年12月)。来源:http://caniuse.com/#feat=websockets - Alex Quinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接