2013-06-25 3 views
2

Я сделал Facebook как чат-сервер и клиент, используя node.js (0.10.10), socket.io (0.9.16) и Express (3.2.6). Он отлично работает во всех браузерах, включая все версии Internet Explorer, но Firefox (21.0) и Chrome (27.0.1453.116) для Windows просто не сработает. Он работает в указанных браузерах на OS X.Socket.IO не работает в Chrome и Firefox на Windows

Когда я пытаюсь отладить ошибки, просмотрев возвращенные данные об ошибках, данные всегда не определены. Я пробовал все возможные перевозки.

Это упрощенный код приложения чата я использовал для тестирования на Chrome и Firefox в Windows:

Клиент:

<script src="http://www.xserverx.com:8080/socket.io/socket.io.js"></script> 
<script> 
    var ioUrl = 'http://www.xserverx.eu:8080'; 
    var socket = io.connect(ioUrl, { 
     'reconnect': true, 
     'reconnection delay': 1500, 
     //'sync disconnect on unload': true 
    }); 

    $('#send-button').click(function() { 
     socket.emit('message', { message: $('#message').val() }); 
    }); 

    // Event listeners 
    socket.on('connect', function() { 
     // Display socket transport type 
     // Is empty in Chrome and Firefox on Windows 
     $('#transport-type').html(socket.socket.transport.name); 
    }); 

    socket.on('onlinechange', function(data) { 
     $('#users-online').html(data.online); 
    }); 

    socket.on('message', function(data) { 
     $('#chat').append('<p>' + data.message + '</p>'); 
    }); 

    socket.on('error', function(data) { 
     $('#errors').html('Error: Error. ' + JSON.stringify(data)); 
    }); 
    socket.on('connect_failed', function(data) { 
     $('#errors').html('Error: Connect failed. ' + JSON.stringify(data)); 
    }); 
    socket.on('reconnect_failed', function(data) { 
     $('#errors').html('Error: Reconnect failed. ' + JSON.stringify(data)); 
    }); 
</script> 

Сервер:

var express = require('express'), 
    app = express(), 
    sio = require('socket.io'); 

var port = 8080; 

var io = sio.listen(app.listen(port)); 
    io.set('log level', 1); // Only show warnings and errors 
    io.set('polling duration', 10); 
    io.enable('browser client minification'); 
    io.enable('browser client gzip'); 


var totalOnline = 0; 

// Server 
io.sockets.on('connection', function(socket) { 
    socket.setMaxListeners(0); 

    console.log('---- New user online ----'); 
    totalOnline++; 
    socket.emit('onlinechange', { online: totalOnline }); 

    socket.on('disconnect', function() { 
     console.log('---- User disconnected ----'); 

     totalOnline--; 

     socket.emit('onlinechange', { online: totalOnline }); 
    }); 

    socket.on('message', function(data) { 
     io.sockets.emit('message', { message: data.message }); 
    }); 
}); 
console.log('Listening on port ' + port); 

Это журнал отладки с сервера при подключении одного пользователя к Chrome в Окна:

Listening on port 8080 
    debug - served static content /socket.io.js 
    debug - client authorized 
    info - handshake authorized NnDQmjFbOsc37kSRdPCg 
    debug - setting request GET /socket.io/1/websocket/NnDQmjFbOsc37kSRdPCg 
    debug - set heartbeat interval for client NnDQmjFbOsc37kSRdPCg 
    debug - client authorized for 
    debug - websocket writing 1:: 
---- New user online ---- 
    debug - websocket writing 5:::{"name":"onlinechange","args":[{"online":1}]} 
    debug - setting request GET /socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166541799 
    debug - setting poll timeout 
    debug - discarding transport 
    debug - cleared heartbeat interval for client NnDQmjFbOsc37kSRdPCg 
    debug - clearing poll timeout 
    debug - xhr-polling writing 8:: 
    debug - set close timeout for client NnDQmjFbOsc37kSRdPCg 
    debug - xhr-polling closed due to exceeded duration 
    debug - setting request GET /socket.io/1/jsonp-polling/NnDQmjFbOsc37kSRdPCg?t=1372166551799&i=0 
    debug - setting poll timeout 
    debug - discarding transport 
    debug - cleared close timeout for client NnDQmjFbOsc37kSRdPCg 
    debug - setting request GET /socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166551918 
    debug - setting poll timeout 
    debug - discarding transport 
    debug - clearing poll timeout 
    debug - clearing poll timeout 
    debug - xhr-polling writing 8:: 
    debug - set close timeout for client NnDQmjFbOsc37kSRdPCg 
    debug - xhr-polling closed due to exceeded duration 
    debug - setting request GET /socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166562023 
    debug - setting poll timeout 
    debug - discarding transport 
    debug - cleared close timeout for client NnDQmjFbOsc37kSRdPCg 

И это ответ от первоначального /socket.io/1/?t=1372166652973 файла:

NnDQmjFbOsc37kSRdPCg:60:60:websocket,htmlfile,xhr-polling,jsonp-polling 

И это часть запросов Chrome войти:

XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/?t=1372166531543". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166541799". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166551918". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166562023". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166572144". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166582249". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166592351". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166602445". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166612595". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166622697". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166632801". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166642900". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166653115". socket.io.js:2 
GET http://www.xserverx.com:8080/socket.io/1/jsonp-polling/NnDQmjFbOsc37kSRdPCg?t=1372166551799&i=0 socket.io.js:2 (FAILED) 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166663203". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166673295". socket.io.js:2 
XHR finished loading: "http://www.xserverx.com:8080/socket.io/1/xhr-polling/NnDQmjFbOsc37kSRdPCg?t=1372166683405". socket.io.js:2 

ответ

2

Вы можете использовать следующий код для решения вашей проблемы

io.configure(function() { 
    io.set("transports", ["xhr-polling"]); 
    io.set("polling duration", 10); 
}); 
+0

Означает ли это, он будет использовать только XHR-пулы и не WebSocket вообще или когда можно использовать Websocket это будет? – Maziyar

0

Я только что узнал, что это было связано с антивирусом человека, у которого были проблемы в Chrome и Firefox. По-видимому, он блокирует веб-сайты и даже опрос в этих браузерах. Я также изменить порт от 8080 до 8079.

Смежные вопросы