не удается получить socket.io после изменения URL приложения - PullRequest
0 голосов
/ 28 февраля 2019

Здесь много вопросов по этой теме, большинство из которых не имеют значения, потому что я использую Express 4.16.4 и socket.io 2.2.0.Во-вторых, поскольку мой пример уже работает как на локальном, так и на удаленном хостингах.

На своем удаленном размещенном сервере я могу создать приложение nodejs, предоставив три опции:

  • корень приложения
  • URL-адрес приложения
  • файл запуска приложения

Мой простой пример приложения установлен в /test, см. Структуру файла:

/test
  /node_modules
    /lots of folders
  index.html
  index.js
  package.json
/domains/
  /mydomain.com
    /public_html
      index.html

Все работает нормальнокогда я перехожу на mydomain.com и моя консоль печатает tx received! со следующими параметрами:

  • корень приложения = 'test'
  • URL приложения = ''
  • файл запуска приложения = 'index.js'

Теперь я хочу, чтобы приложение было доступно вместо mydomain.com/test.Но когда я изменяю URL своего приложения с '' на 'test', io не определен, потому что я не могу получить файл /socket.io/socket.io.js.Я все еще получаю индексный файл, обслуживаемый экспрессом, потому что я также изменяю app.get("/", на app.get("/test",

index.js:

var express = require('express');
var app     = express();
var server  = app.listen(8000);
var socketIO = require('socket.io');
var io = socketIO(server);

app.get("/test", function(req, res) {
  res.sendFile( __dirname + "/index.html" );
});

io.on('connection', function(socket){
  socket.emit('tx');
});

index.html:

<!doctype html>
<html>
  <head>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io.connect();
      socket.on('tx', function () {
        console.log('tx received!');
      });
    </script>
  </head>
  <body>
    TEST
  </body>
</html>

С помощью Express я могу успешно использовать app.use () для обслуживания статических файлов в __dirname, когда запрашивается /test.

Проблема заключается в том, что socket.io использует магию для установления соединения, и яНе знаю, есть ли в файле socket.io эквивалент app.use.

Tnx для длительного чтения, и любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

После долгих проб и ошибок я нашел решение:

Чтобы изменить URL-адрес приложения, необходимо также изменить путь к серверу socket.io, см. Документация сервера .

Серверная сторона index.js: var io = socketIO(server, {path: '/test/socket.io'});

Клиентская сторона index.html: <script src="/test/socket.io/socket.io.js"></script> и подключение к новому URL var socket = io.connect({path: "/test/socket.io"});

0 голосов
/ 28 февраля 2019

вы можете использовать socket.use () , который регистрирует промежуточное программное обеспечение, которое является функцией, которая выполняется для каждого входящего пакета.Например,

io.on('connection', (socket) => {
  socket.use((packet, next) => {
    if (packet.doge === true) return next();
    next(new Error('Not a doge error'));
  });
});

. Для этого конкретного вопроса вы можете просто перенести код socketio для импорта и другой код в отдельный файл js, который будет экспортировать объект io, так что вы можете ссылаться на код в каждом html-файле.к которому вы цепляетесь, импортируя сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...