Nodejs socket.io 在IE下面无法连接

Nodejs socket.io 在IE下面无法连接

我用的IE9 试了下IE8 IE7 也是一样无法连接无法emit 不知道什么原因 在firefox chrome 下都是正常的 求助 !!! chat.js 内容:

var express = require(‘express’), app = express(), http = require(‘http’), server = http.createServer(app).listen(8000, function(){console.log(‘server listen on 8000’)}); var io = require(‘socket.io’).listen(server);

app.get(’/’,function(req, res){ res.sendfile(__dirname+’/chat.html’); })

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

io.sockets.on(‘connection’, function(socket) { socket.on(‘msg’, function(data) { socket.broadcast.emit(‘showmsg’,data); }); socket.on(‘disconnect’, function() { // handle disconnect }); });

静态文件 chat.html :

<!doctype html> <html> <head> <meta http-equiv=“content-type” content=“text/html; charset=UTF-8”> <title>chat test</title>

</head>
<body>
    <form id="form">
    message: <input type="text" id='msg' value=""/>
    <input type="submit" value="send" id="send"/> 
    </form>
    <div id="showResult"></div>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect(),
        result = $('#showResult');
        socket.on('connect', function() {
              result.append($('<p>').text('Connected')); 
        });
    socket.on('showmsg', function(msg) {
      result.append($('&lt;p&gt;').text(msg).append($('&lt;em&gt;').text(' from server')));
    });
     
    $('#form').submit(function(e) {
      e.preventDefault();
      var msg = $('#msg').val();
      result.append($('&lt;p&gt;').text(msg).append($('&lt;em&gt;').text(' from me')));
      socket.emit('msg',msg);
    }); 

&lt;/script&gt;

</body>

</html>


4 回复

针对您遇到的“Nodejs socket.io 在IE下面无法连接”的问题,这里有几个可能的原因和解决方案。首先,确保您的浏览器兼容性设置正确,并且已经安装了必要的插件(如Flash)。其次,检查您的代码中是否有任何不支持旧版IE的特性。最后,确保socket.io库已正确配置以支持多种传输方式。

可能的原因

  1. 浏览器兼容性问题:旧版本的IE可能不支持某些现代的Web技术。
  2. 缺失必要的插件:例如Flash插件对于flashsocket传输方式是必需的。
  3. 配置问题:socket.io的配置可能需要调整以适应旧版IE的需求。

解决方案

1. 确保安装了Flash插件

由于flashsocket传输方式依赖于Flash插件,确保您的IE浏览器已经安装并启用了Flash插件。

2. 配置socket.io支持多种传输方式

在您的chat.js文件中,确保配置了多种传输方式,以便在不同的环境中使用不同的传输方式:

var express = require('express'),
    app = express(),
    http = require('http'),
    server = http.createServer(app).listen(8000, function(){
        console.log('server listen on 8000');
    });

var io = require('socket.io').listen(server);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/chat.html');
});

// 设置支持的传输方式
io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);

io.sockets.on('connection', function(socket) {
    socket.on('msg', function(data) {
        socket.broadcast.emit('showmsg', data);
    });

    socket.on('disconnect', function() {
        // 处理断开连接的情况
    });
});

3. 调整客户端代码

确保客户端代码能够处理不同浏览器的行为差异。您可以尝试以下调整:

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>chat test</title>
</head>
<body>
    <form id="form">
    message: <input type="text" id='msg' value=""/>
    <input type="submit" value="send" id="send"/> 
    </form>
    <div id="showResult"></div>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect({transports: ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']});
        var result = $('#showResult');

        socket.on('connect', function() {
            result.append($('<p>').text('Connected')); 
        });

        socket.on('showmsg', function(msg) {
            result.append($('<p>').text(msg).append($('<em>').text(' from server')));
        });

        $('#form').submit(function(e) {
            e.preventDefault();
            var msg = $('#msg').val();
            result.append($('<p>').text(msg).append($('<em>').text(' from me')));
            socket.emit('msg', msg);
        }); 
    </script>
</body>
</html>

通过以上调整,您应该可以解决在IE9及以下版本浏览器中无法连接的问题。如果问题仍然存在,请进一步检查浏览器的开发者工具中的网络请求和错误信息,以获取更多调试线索。


没人回复啊 难道没人遇到这种问题吗 ,求助大神 !

**忘记说了,在本地用localhost访问IE是可以的 ,换成局域网的192.168.1.133或外网的地址IE就不行了

在IE9及更早版本中,Socket.IO 默认的传输方式可能不完全支持这些浏览器。你需要确保配置了合适的传输方式,并且前端和后端都能正确处理这些传输方式。

后端代码(chat.js)

确保你在后端配置了所有可用的传输方式,特别是那些对旧版IE友好的传输方式:

var express = require('express'),
    app = express(),
    http = require('http'),
    server = http.createServer(app).listen(8000, function(){
        console.log('server listen on 8000');
    });

var io = require('socket.io')(server);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/chat.html');
});

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

io.sockets.on('connection', function(socket) {
    socket.on('msg', function(data) {
        socket.broadcast.emit('showmsg', data);
    });
    socket.on('disconnect', function() {
        // handle disconnect
    });
});

前端代码(chat.html)

确保前端引用了正确的库,并且正确地初始化了Socket.IO连接:

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>chat test</title>
</head>
<body>
    <form id="form">
        message: <input type="text" id='msg' value=""/>
        <input type="submit" value="send" id="send"/>
    </form>
    <div id="showResult"></div>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect({ transports: ['xhr-polling'] }),
            result = $('#showResult');

        socket.on('connect', function() {
            result.append($('<p>').text('Connected'));
        });

        socket.on('showmsg', function(msg) {
            result.append($('<p>').text(msg).append($('<em>').text(' from server')));
        });

        $('#form').submit(function(e) {
            e.preventDefault();
            var msg = $('#msg').val();
            result.append($('<p>').text(msg).append($('<em>').text(' from me')));
            socket.emit('msg', msg);
        });
    </script>
</body>
</html>

关键点解释

  1. 后端配置

    • io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']); 确保配置了多种传输方式,尤其是 xhr-pollingjsonp-polling,这些对旧版IE更加友好。
  2. 前端初始化

    • 使用 io.connect({ transports: ['xhr-polling'] }) 显式指定使用 xhr-polling,这样可以避免某些情况下默认传输方式不被支持的问题。

通过上述配置,你应该能在IE9及更早版本的浏览器中正常工作。如果仍然有问题,请检查网络请求是否成功建立,并查看控制台是否有错误信息。

回到顶部