2

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

如果客户从 PC 进入网站,它会完美运行。如果客户端使用 iPad(ios 5.1/最新的 Chrome/safari),它有时只能工作。大多数情况下,网页加载完毕后,iPad 就会连接,但需要很长时间,服务器才会关闭连接。然后 iPad 获得新连接,但无法真正初始化会话。它会定期断开连接并尝试再次重新连接。

这里是socket.io的协议: 在此处输入图像描述

客户端代码:

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);

});
4

1 回答 1

0

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

当您说它有时有效时,很可能它正在退回到长轮询。它可以通过这种方式连接,但可能会出现超时问题。在这个问题中查看 websocket 和 long-polling 之间的区别。默认情况下会重新连接。但是会发生超时。

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

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

于 2013-06-05T06:35:42.790 回答