Pregunta

¿Es posible usar socket.io de una manera cruzada?¿Si es así, cómo?La posibilidad se menciona alrededor de la web, pero no se dan ejemplos de código en ningún lugar.

¿Fue útil?

Solución

citando la Socket.IO Preguntas frecuentes :

¿SOBRE SOCKE.IO SOPORTE Conexiones de dominio cruzado?

¡Absolutamente, en cada navegador!

En cuanto a cómo lo hace: los websockets nativos son de dominio cruzado por diseño, Socket.IO sirve un archivo de política de flash para la comunicación flash de dominio cruzado, XHR2 puede usar CORS y, finalmente, siempre puede usar JSONP.

Otros consejos

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

es posible usar socket.io de una manera de dominio cruzado? Sí, absolutamente.

Si es así, ¿cómo?

Opción 1: Forzar el uso de Websockets solo

De forma predeterminada, los WebSockets son de dominio cruzado. Si obliga a Socket.IO, solo para usarlo como medio para conectar el cliente y el servidor, es bueno para ir.

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 los navegadores (para clientes) que no apoyan a WebSockets. Con esto, casi mata la magia que es Socket.IO, ya que gradualmente comienza con un largo moteado para actualizar más tarde a Websockets (si el cliente lo admite).

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

Opción 2: Permita que las cors en el lado del servidor, deje que Socket.IO se encargue de usar WebSockets o larga votación.

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

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 zócalo del lado del cliente:

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

Socket.IO admite conexiones de dominio cruzado, pero tenga en cuenta que su cookie no se pasará al servidor.Tendrá para:

(1) Se proponen un esquema de identificación alternativo (un token personalizado o una cookie de JavaScript: simplemente tenga en cuenta que esta no debe ser la ID de sesión en realidad, a menos que desee ponerse en riesgo de detectar el secuestro)

o (2) Envíe una buena solicitud HTTP de moda antigua al servidor primero para obtener la cookie.Luego se transmitirá con el apretón de manos de conexión del zócalo.

fácil y de seguridad!

En el archivo principal, colóquelo antes de IO.ON ('Conexión'), agregue las líneas:

io.set('origins', 'yoursite.com:*');

io.on('connection', function (socket) {

sí lo hace. He implementado Cross Domain Socket.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.

Crea tu servidor por io así:

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 la matriz de origenes especifique un origen válido

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top