NodeJS适用于IE,但Chrome,Firefox和Opera不稳定

时间:2014-05-08 01:58:18

标签: node.js socket.io

我正在使用nodejs和socket.io开发聊天系统。到目前为止,我的应用程序与Internet Explorer 10完美配合,但大多数时候我无法在Firefox或Chrome或Opera上发送消息(但我仍然可以阅读从Chrome / Firefox / Opera中的IE发送的消息)。我的所有浏览器都更新到最新版本,没有任何插件/扩展名。我也试过几个不同的自由端口,但没有任何结果。我正在使用Windows 7环境,所有测试都是在本地完成的。

我不知道出了什么问题,过去几个小时一直在挠头,但无法想象。我是node.js的新手,所以请帮忙!

编辑:我试图通过使用io.set('transports',['websocket'])强制传输到websocket;现在IE也停止工作了,所以看来之前IE工作的原因是socket.io强制IE使用xhr-polling而不是websocket。

我的代码如下(取自http://code.tutsplus.com/tutorials/real-time-chat-with-nodejs-socketio-and-expressjs--net-31708

服务器index.js

    var express = require("express");
    var app = express();
    var port = 3700;


    app.set('views', __dirname + '/tpl');
    app.set('view engine', "jade");
    app.engine('jade', require('jade').__express);
    app.get("/", function(req, res){
        res.render("page");
    });

    app.use(express.static(__dirname + '/public'));

    var io = require('socket.io').listen(app.listen(port));
    console.log(port);
    console.log(io);

    io.sockets.on('connection', function (socket) {
console.log("connect");
        socket.emit('message', { message: 'welcome to the chat !' });
        socket.on('send', function (data) {
            io.sockets.emit('message', data);
        });
    });

    console.log("Listening on port " + port);

视图

    doctype html
    head
        title= "Real time web chat"
        script(src='/chat.js')
        script(src='/socket.io/socket.io.js')       
        body
            #content(style='width: 500px; height: 300px; margin: 0 0 20px 0; border:         solid 1px #999; overflow-y: scroll;')

.controls             |名称:             输入#名(样式= '宽度:350像素;')             BR             输入#字段(式= '宽度:350像素;')             输入#send(type ='button',value ='send')

Chat.js

    window.onload = function() {

var messages = [];
var socket = io.connect('http://localhost:3700');
var field = document.getElementById("field");
var sendButton = document.getElementById("send");
var content = document.getElementById("content");
var name = document.getElementById("name");

socket.on('message', function (data) {
    if(data.message) {
        messages.push(data);
        var html = '';
        for(var i=0; i<messages.length; i++) {
            html += '<b>' + (messages[i].username ? messages[i].username : 'Server') + ': </b>';
            html += messages[i].message + '<br />';
        }
        content.innerHTML = html;
    } else {
        console.log("There is a problem:", data);
    }
});

sendButton.onclick = function() {
    if(name.value == "") {
        alert("Please type your name!");
    } else {
        var text = field.value;
        socket.emit('send', { message: text, username: name.value });
    }
};

}

编辑:根据类似问题Socket.io does not work on Firefox & Chrome,通过在chat.js中添加以下代码来解决问题。我做了它,它现在在chrome / firefox / opera上工作,但它强制浏览器使用long-pooling / ajax而不是websocket,我希望我的浏览器使用websocket(chrome / firefox应该能够支持websocket比IE我认为?)

    io.configure('development', function(){
      io.set('transports', ['xhr-polling']);
    });

0 个答案:

没有答案