Domanda

È possibile utilizzare il socket.io in modo cross dominio?Se é cosi, come?La possibilità è menzionata attorno al web ma non vengono forniti esempi di codice.

È stato utile?

Soluzione

Citando il Socket.Io FAQ :

.

Socket.IO supporta le connessioni del dominio cross-dominio?

Assolutamente, su ogni browser!

Quanto a come lo fa: native WebSeets sono cross-Domain Domain By Design, Socket.IO serve un file di politica flash per la comunicazione flash cross-Domain Flash, XHR2 può utilizzare i CORSE, e infine è sempre possibile utilizzare JSONP.

Altri suggerimenti

** Socket.io Versione -> 1.3.7 **

è possibile utilizzare il socket.io in un modo cross da dominio? Sì, assolutamente.

in caso affermativo, come?

Opzione 1: Forza l'uso delle tasche Web

Per impostazione predefinita, WebSocette sono cross dominio. Se si forza il socket.Io solo utilizzare quello come mezzi per collegare il client e il server, sei a posto.

lato server

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

lato client

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

È così. Problema? Non funzionerà sui browser (per i clienti) che non supportano le tasche Web. Con questo ti uccidi praticamente la magia che è socket.Io, poiché inizia gradualmente con un lungo polling con aggiornamento più tardi a WebSeset (se il client lo supporta.)

Se sei sicuro al 100% tutti i tuoi client accedi con i browser conformi HTML5, allora sei a posto.

Opzione 2: Consentire le scorte sul lato server, lasciare la presa. Essere gestire se utilizzare WebSetweet o un polling lungo.

Per questo caso, è solo necessario regolare la configurazione del lato server. La connessione client è la stessa del sempre.

lato server

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

È così. Spero che aiuti chiunque altro.

Basta inserire il tuo nome di dominio remoto quando si crea la presa laterale client:

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

Socket.IO supporta le connessioni cross-Domain, ma tieni presente che il tuo cookie non verrà passato al server.Ai qualcuno dovrai:

(1) si presenta con uno schema di identificazione alternativo (un token personalizzato o un cookie JavaScript ... Tieni presente che questo non dovrebbe essere l'ID di sessione effettivamente, a meno che tu non voglia metterti a rischio di hijacking di sessione)

.

o (2) Invia una buona richiesta HTTP JSONP del vecchio stile al server per ottenere prima il cookie.Quindi verrà trasmesso w / la stretta di mano della connessione del socket.

Facile e sicurezza!

Nel file principale posizionalo prima di Io.ON ('Connection'), aggiungi le linee:

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

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

Sì lo fa. Ho implementato il socket Domain Domain.IO per verificare se funziona.

<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>
.

che dovrebbe funzionare bene.

Crea il tuo server di IO come questo:

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')});
.

Nella matrice di origini Specificare l'origine valida

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top