Вопрос

Можно ли использовать Socket.IO в кросс-домене?Если так, как?Возможность упоминается вокруг Интернета, но никаких примеров кода нигде не приведены.

Это было полезно?

Решение

цитируют socket.io faq :

Поддерживает междоменное соединение Socket.io?

абсолютно, на каждом браузере!

Что касается того, как он это делает: родные веб-сайты являются перекрестными доменами по дизайну, Socket.io служит файлу флэш-политики для перекрестной вспышки, XHR2 можно использовать CORS, и, наконец, вы всегда можете использовать JSONP.

Другие советы

** socket.io версия -> 1.3.7 **

Можно ли использовать Socket.io в перекрестной домене? Да, абсолютно.

Если так, как?

Вариант 1: Принудительное использование Websockets только

По умолчанию Websockets - это пересечение. Если вы заставляете Socket.IO, чтобы использовать только что, как средство для подключения клиента и сервера, вы хотите пойти.

Серверная сторона

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

сторона клиента

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

Вот это. Проблема? Не будет работать на браузерах (для клиентов), которые не поддерживают WebSockets. С этим вы в значительной степени убить магию, которая является Socket.io, поскольку он постепенно начинается с длинным опросом, чтобы позже обновить до Websockets (если клиент поддерживает его.)

Если вы на 100% уверены, что все ваши клиенты будут доступны с помощью совместимых HTML5 браузерами, то вы хотите пойти.

Вариант 2: Разрешить CORS на стороне сервера, пусть Socket.IO обрабатывает, использовать ли WebSockets или длинный опрос.

Для этого случая вам нужно только настроить настроить на настройку боковых серверов. Клиентское соединение такое же, как всегда.

Серверная сторона

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

Вот это. Надеюсь, это поможет кому-то еще.

Просто вставьте свое имя удаленного домена при создании бокового розетка клиента:

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

Socket.IO поддерживает перекрестные доменные соединения, но имейте в виду, что ваше cookie не будет передано на сервер.Вам придется либо:

(1) Придумайте альтернативную схему идентификации (пользовательский токен или файл cookie javaScript - просто имейте в виду, что это не должно быть фактически идентификатором сеанса, если вы не хотите подвергать себя риску угнать сеанса)

.

или (2) Отправить хороший старомодный HTTP HTTP JSONP на сервер сначала, чтобы получить файл cookie.Затем он будет передан с помощью рукопожатия соединения сокета.

Легко и безопасность!

В основном файле поместите его до IO.ON («подключение»), добавьте строки:

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

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

Да это делает. Я реализовал Cross Domain Socket.io, чтобы проверить, работает ли он.

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

Это должно работать нормально.

Создайте свой сервер на io, как это:

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

в массиве происхождения Укажите действительное происхождение

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top