Es posible el uso de Socket.IO en una cruz de dominio manera? Si es así, ¿cómo? La posibilidad se menciona en la web pero no hay ejemplos de código se da en cualquier lugar.

7 Comentarios

  1. 28

    Citando la zócalo.io FAQ:

    Hace Zócalo.IO apoyo de la cruz-dominio de las conexiones?

    Absolutamente, en todos los navegadores!

    Cuanto a cómo lo hace: Nativo de WebSockets cross-dominio de diseño, encaje.io sirve un flash archivo de política entre dominios flash de comunicación, XHR2 puede utilizar CORS, y, finalmente, usted puede utilizar siempre JSONP.

    • En realidad estoy corriendo a algunos problemas con la Cruz de socket de Dominio.io conexiones. Cuando zócalo.io vuelve a XHR-Sondeo/Ajax, socket.io intenta hacer solicitudes para el dominio actual /socket.io/1, esto hace que una no puede «onClose » en el null. Googleando este error trae un par de github problemas, pero nada que se aplica a mi situación (como creo que es una config problema, no un bug).
    • Esta respuesta es la forma, modo fuera de fecha. Los navegadores implementan mismo origen protecciones en webSockets igual que para las llamadas Ajax. Si quieres un origen de la cruz de socket.io de la conexión permite, usted tiene que habilitar de forma explícita en su zócalo.io servidor.
    • El enlace está muerto.
  2. 20

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

    Es posible el uso de Socket.Io en una cruz de dominio manera?.
    Sí, absolutamente.

    Si es así, ¿cómo?

    Opción 1: Forzar el uso de Websockets sólo

    Por defecto, websockets son de dominio cruzado. Si la fuerza de Socket.io solo lo utilice como medio para conectar el cliente y el servidor, que son buenos para ir.

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

    Que es. Problema? No funciona en los navegadores (para los clientes) que no son compatibles con websockets. Con este casi matar la magia que es el Zócalo.io, ya que poco a poco comienza con el tiempo de sondeo para la actualización posterior a websockets (si el cliente lo soporta.)

    Si estás 100% seguro de que todos sus clientes tendrán acceso con HTML5 compatible con los navegadores, entonces son buenos para ir.

    Opción 2: Permitir CORS en el lado del servidor, vamos a Encaje.io manejar si se ha de utilizar websockets o tiempo de sondeo.

    Para este caso, sólo es necesario ajustar configuración de servidor. La conexión del cliente es el mismo de siempre.

    El 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();
     });

    Que es. Espero que ayude a alguien más.

    • Usted Señor, es el jefe!
    • me alegro de que te podría ayudar ^_^ (aunque tengo que ser la ‘lady boss’, jeje).
    • jeje, ¡está bien! Usted, señora, es el jefe 🙂
  3. 17

    Simplemente inserte su nombre de dominio remoto a la hora de crear el lado del cliente socket:

    var socket = io.connect('http://example.com:8080');
    • Demasiado viejo respuesta. io.conecte no es una función.
    • io.connect todavía debe de estar trabajando (2016): socket.io/docs/#con-con-express-3/4. Véase también el zócalo.io/docs/cliente-api/: «connect Despedido después de una conexión exitosa.»
  4. 8

    Zócalo.io soporta conexiones entre dominios, pero tenga en cuenta que las cookies no se pasa al servidor. Tendrá que:

    (1) venir para arriba con otro esquema de identificación (una costumbre token o un javascript cookie-sólo ten en cuenta que esta no debe ser la realidad de id de sesión, a menos que usted quiere ponerse en riesgo de secuestro de sesión)

    o (2) enviar un good old fashioned HTTP JSONP petición al servidor para obtener la cookie. Entonces será transmitida w/la conexión de socket apretón de manos.

  5. 3

    Fácil y de seguridad!

    En el archivo principal lugar antes de io.en («conexión»), agregue las líneas:

    io.set('origins', 'yoursite.com:*');
    
    io.on('connection', function (socket) {
  6. 1

    Sí lo hace.
    He implementado cruz socket de dominio.io para probar si funciona.

    <script src="http://your-nodejs-domain.com:3000/public/js/jquery.js"></script>
      <script src="http://your-nodejs-domain.com:3000/socket.io/socket.io.js"></script>
      <script>
    
          var socket = io.connect('http://your-nodejs-domain:3000');
          $(document).ready(function(){
    
              socket.on('test message', function(msg){
                   console.log("Got the message: " + msg);
              });
          });
    
      </script>

    Que debería funcionar bien.

    • podrías dar el código completo de la server.js aplicación
  7. 1

    crear tu server por io como este:

    const server = require('http').createServer();
    
    const io = require('socket.io')(server, {
        origins:["127.0.0.1:8000"],
        path: '/',
        serveClient: false,
        //below are engine.IO options
        pingInterval: 20000,
        pingTimeout: 5000,
        cookie: false
    });
    
    io.on('connection', function(socket){
        console.log("here new user welcom")
    });
    
    
    server.listen(3000,function(){
        console.log('listening on *:3000')});

    en los orígenes de la matriz de especificar válido origen

Dejar respuesta

Please enter your comment!
Please enter your name here