Pergunta

É possível usar o Socket.IO em vários domínios?Se sim, como?A possibilidade é mencionada na web, mas nenhum exemplo de código é fornecido em lugar nenhum.

Foi útil?

Solução

citando o Socket.Io FAQ :

.

faz soquete.io suporta conexões de domínio cruzado?

Absolutamente, em todos os navegadores!

quanto a ele: Websockets nativos são por design de domínio cruzado, Socket.io serve um arquivo de diretiva de flash para comunicação flash de domínio cruzado, XHR2 pode usar o CORS e, finalmente, você pode sempre usar o JSONP.

Outras dicas

** Versão do Socket.IO --> 1.3.7 **

É possível usar o Socket.Io em vários domínios? Sim absolutamente.

Se sim, como?

Opção 1:Forçar o uso apenas de Websockets

Por padrão, os websockets são entre domínios.Se você forçar o Socket.io a usar isso apenas como meio de conectar cliente e servidor, você estará pronto.

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

É isso.Problema?Não funcionará em navegadores (para clientes) que não suportam websockets.Com isso você praticamente mata a mágica que é o Socket.io, já que ele gradualmente começa com uma longa pesquisa para posteriormente atualizar para websockets (se o cliente suportar).

Se você tiver 100% de certeza de que todos os seus clientes acessarão com navegadores compatíveis com HTML5, você estará pronto.

Opção 2:Permita o CORS no lado do servidor, deixe o Socket.io decidir se deve usar websockets ou pesquisas longas.

Neste caso, você só precisa ajustar a configuração do servidor.A conexão do cliente é a mesma de sempre.

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

É isso.Espero que ajude mais alguém.

Basta inserir seu nome de domínio remoto ao criar o soquete do lado do cliente:

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

Socket.Io suporta conexões entre domínios, mas tenha em mente que seu cookie não será passado para o servidor.Você terá que:

(1) venha com um esquema de identificação alternativo (um token personalizado ou um cookie de javascript - basta ter em mente que isso não deve ser o ID da sessão, a menos que você queira se colocar em risco de seqüestro de sessão)

.

ou (2) Envie uma boa antiquada solicitação HTTP JSONP para o servidor primeiro para obter o cookie.Então será transmitido w / o aperto de mão da conexão do soquete.

Fácil e segurança!

No arquivo principal coloque-o antes de io.on('connection'), adicione as linhas:

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

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

Sim.Implementei o socket.io entre domínios para testar se 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>

Isso deve funcionar bem.

crie seu servidor por io assim:

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

na matriz de origens especifique uma origem válida

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top