** Версия Socket.IO -> 1.3.7 **
Можно ли использовать Socket.Io в междоменном режиме? Да, абсолютно.
Если да, то как?
Вариант 1. Принудительное использование только веб-сокетов
По умолчанию веб-сокеты являются междоменными.Если вы заставляете Socket.io использовать это только как средство для соединения клиента и сервера, вы можете идти.
Сторона сервера
//HTTP Server
var server = require('http').createServer(app).listen(8888);
var io = require('socket.io').listen(server);
//Allow Cross Domain Requests
io.set('transports', [ 'websocket' ]);
Клиентская сторона
var connectionOptions = {
"force new connection" : true,
"reconnectionAttempts": "Infinity", //avoid having user reconnect manually in order to prevent dead clients after a server restart
"timeout" : 10000, //before connect_error and connect_timeout are emitted.
"transports" : ["websocket"]
};
var socket = io("ur-node-server-domain", connectionOptions);
Вот и все.Проблема?Не будет работать в браузерах (для клиентов), которые не поддерживают веб-сокеты.Этим вы в значительной степени убиваете волшебство Socket.io, поскольку оно постепенно начинается с длинного опроса для последующего обновления до веб-сокетов (если клиент поддерживает это).
Если вы на 100% уверены, что все ваши клиенты будутдоступ с браузерами, совместимыми с HTML5, тогда все готово.
Вариант 2. Разрешить CORS на стороне сервера, разрешить Socket.io определять, использовать ли веб-сокеты или длительный опрос.
В этом случае вам нужно только настроить серверную настройку.Клиентское соединение такое же, как всегда.
Серверная сторона
//HTTP Server
var express=require('express');
//Express instance
var app = express();
//ENABLE CORS
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
Вот и все.Надеюсь, это кому-нибудь еще поможет.