IE8和9上socket.io的问题

时间:2014-08-17 11:12:33

标签: node.js internet-explorer-8 cross-browser socket.io

Socket.io在除IE8和9之外的每个平台上都能完美运行,这是客户端的要求。你能帮忙解决这个问题吗?

我一直在阅读所有类似的问题,但我发现的大多数解决方案都无法在IE8上解决这个问题。

这是结构:

服务器-SIDE

var ip = 'xxx.xxx.xxx.xxx';
var ipPort = '8081';

var app = require('http').createServer(handler);
var io = require('socket.io')(app);
var fs = require('fs')

app.listen(ipPort, function() {
//console.log('Listening at: http://'+ ip +':'+ ipPort +'');
});

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

function handler (req, res) {
 fs.readFile(__dirname + '/test.html',
  function (err, data) {
    if (err) {
    res.writeHead(500);
    return res.end('Error loading index.html');
    }

  res.writeHead(200);
  res.end(data);
 });
}

客户端

<html>
<body>
</body>
   <script src="/socket.io/socket.io.js"></script>
   <script>
    alert("hi");

   //var socket = io.connect('xxx.xxx.xxx.xxx:8081',{transports:'jsonp-polling');
   var socket = io.connect(''xxx.xxx.xxx.xxx:8081',{secure: true});

   socket.on('news', function (data) {
    alert("hello data:"+data[0]);
   socket.emit('my other event', { my: data });
   });  

   socket.on('connect', function () {
     alert("hello socket");
   });

   </script>
</html>

我没有任何错误,只是没有回复..我在socket.on('news')上放置了一个alert()并且没有得到任何反馈,但是我添加了socket.on('connect')并将alert()置于其中并弹出!!

希望有人在此之前通过这个问题并解决它。 我在win7和node(v0.10.30)socket.io(v1.0.6) 非常感谢所有的帮助。

2 个答案:

答案 0 :(得分:2)

我发现这个问题的一个解决方案是在服务器端安装add express; 所有奇迹般的作品! (npm install express)

enter image description here

想知道我们是否都需要安装快递以避免这些问题.. mmmhh!

编辑: 显然,客户端代码中还有另外两个问题:

我在页面标题处添加了<!DOCTYPE html>,并将socket.io外部脚本链接和代码移动到标记的末尾。所有问题都消失了。

答案 1 :(得分:1)

我注意到使用express和socket.io的问题(可能;不是100%确定真正的原因)与IE8,如果你重新加载一个带有套接字的网页,有时候新套接字会赢得功能适当

套接字服务器会丢失数据包,偶尔表示不加载网页;需要重新启动服务器来解决此问题。很容易观察到只是快速重新加载一个带有socket.io客户端的网页,它试图来回发送消息(我们的测试框架就是这样)。

我怀疑是快递,因为socket.io似乎挂钩表达,加载网页本身似乎偶尔会有问题。

在调查时我注意到套接字没有在页面卸载时自动断开连接,而是在服务器端看起来超时断开连接。

明确断开这种方式似乎解决了它(根据需要转换为您喜欢的框架):

$(window).on("beforeunload", function() {
    socket.disconnect();
});