Saltar al contenido

Conexión entre dominios en Socket.IO

Deseamos brindarte la mejor información que descubrimos por todo internet. Nosotros deseamos que te sirva de ayuda y si puedes aportar algo que nos pueda ayudar a crecer hazlo con total libertad.

Solución:

Citando las preguntas frecuentes de socket.io:

¿Socket.IO admite conexiones entre dominios?

¡Absolutamente, en todos los navegadores!

En cuanto a cómo lo hace: los WebSockets nativos son multidominio por diseño, socket.io sirve un archivo de política flash para la comunicación flash entre dominios, XHR2 puede usar CORS y, finalmente, siempre puede usar JSONP.

**Socket.IO versión –> 1.3.7 **

¿Es posible usar Socket.Io de forma cruzada?
Si, absolutamente.

¿Si es así, cómo?

Opción 1: Forzar el uso de Websockets únicamente

De forma predeterminada, los websockets son dominios cruzados. Si obliga a Socket.io a usar solo eso como un medio para conectar el cliente y el servidor, está listo para comenzar.

Lado del servidor

//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' ]);

Lado del cliente

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);

Eso es todo. ¿Problema? No funcionará en navegadores (para clientes) que no admitan websockets. Con esto, prácticamente matas la magia que es Socket.io, ya que comienza gradualmente con un sondeo largo para luego actualizarse a websockets (si el cliente lo admite).

Si está 100% seguro de que todos sus clientes accederán con navegadores compatibles con HTML5, entonces está listo para comenzar.

Opción 2: permitir CORS en el lado del servidor, dejar que Socket.io se encargue de usar websockets o encuestas largas.

Para este caso, solo necesita ajustar la configuración del lado del servidor. La conexión del cliente es la misma de siempre.

Lado del servidor

//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();
 );

Eso es todo. Espero que ayude a alguien más.

Simplemente inserte su nombre de dominio remoto al crear el socket del lado del cliente:

var socket = io.connect('http://example.com:8080');

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *