socket.io – iPad总是得到一个超时,虽然它连接

我有一个简单的聊天应用程序与node.js和socket.io: 教程完整的代码

如果客户从PC上进入网站,它是完美的。 如果客户端使用IPad(ios 5.1 /最新版本的Chrome / Safari),则只能使用。 大多数情况下,网页被加载,然后iPad连接,但服务器closures连接需要很长时间。 然后iPad得到一个新的连接,但不能真正初始化会话。 它会定期断开连接并尝试重新连接。

这里socket.io的protocoll: 在这里输入图像描述

客户代码:

socket = io.connect(http://42.58.240.427:4000); socket.on('connect', function(){ send('init'); }); 

服务器代码:

 io.sockets.on('connection', function (socket) { socket.on('init', function(){ console.log("Good morning new User"); }); socket.on('disconnect', function(){ requesthandler['disconnect'](socket, io); }); 

我猜测这是由于浏览器websocket的支持。 iOS Safari(5.0-5.1)浏览器实现了一个较老的websocket协议(Hixie-76)。 所以它只部分支持websocket。 请参阅websocket支持图表 。

当你说它有时候很有效的时候,很可能是回到长期投票。 它可以用这种方式连接,但它可能有超时问题。 在这个问题上查看websocket和long-polling之间的区别。 重新连接默认情况下发生。 但超时会发生。

所以最好将浏览器升级到完全支持websockets的最新版本。

来源: 哪些浏览器支持HTML5 WebSocket API?