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