【问题标题】:problems with socket.io on IE8 and 9IE8 和 9 上的 socket.io 问题
【发布时间】:2015-06-30 22:31:01
【问题描述】:

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

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

结构如下:

服务器端

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) 非常感谢所有的帮助。

【问题讨论】:

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


    【解决方案1】:

    我发现这个问题的一个解决方案是将 add express 安装到服务器端; 一切都奇迹般地工作! (npm install express)

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

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

    我在页面头部添加了&lt;!DOCTYPE html&gt;,并将socket.io外部脚本链接和代码移到了标签的末尾。所有问题都消失了。

    【讨论】:

    • “到标签末尾”?你的意思是在“
    【解决方案2】:

    我注意到将 express 和 socket.io 与 IE8 一起使用时出现问题(可能;不是 100% 确定真正的原因),如果您重新加载带有套接字的网页,有时新的套接字将无法正常运行

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

    我怀疑 express,因为 socket.io 似乎与 express 挂钩,并且加载网页本身似乎偶尔会出现问题。

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

    以这种方式显式断开连接似乎可以解决问题(根据需要转换为您喜欢的框架):

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

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2013-04-20
      • 2012-01-04
      相关资源
      最近更新 更多