Как установить соединение sh socket.io с приложением NodeJS, запущенным на Phusion Passenger? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать простое приложение для коллективного редактирования текста NodeJS, которое использует Socket.io, но у меня есть некоторые проблемы с подключением сокетов при развертывании на моем сервисе веб-хостинга.

Для запуска приложение NodeJS в моем веб-хостинге. Мне нужно зарегистрировать его через интерфейс NodeJS Selector в облаке linux, который запускает приложение через Phusion Passenger.

Я подозреваю, что трафик c каким-то образом запутывается, когда я связываю root приложения папку на внешний URL-адрес в Phusion Passenger / NodeJS Selector. Обычный способ, которым socket.io предоставляет клиентский скрипт в /socket.io/socketio.js, не работает, поэтому я просто использую его как файл stati c из того же индекса папки. html использует.

Теперь клиент может найти сценарий socket.io, но в клиентской консоли я получаю:

socket.io.js:7 GET https://example.com/socket.io/?EIO=3&transport=polling&t=NCtkY7Y 404 

Хотя в моем приложении root должно быть https://example.com/socketapp/

Добавление параметра «путь» к io.connect () в клиенте не помогло. Запросы на получение будут обрабатываться express путем отправки index. html из папки publi c, в то время как POST по-прежнему выдает ошибки 404.

Что мне здесь не хватает? Заранее благодарю!

/ socketapp / server. js:

const port = process.env.PORT || 3000;

// '/socketapp' in this case
const baseUri = process.env.PASSENGER_BASE_URI || '/'; 

let express = require('express');
let app = express();
let http = require('http').createServer(app);
let io = require('socket.io')(http);

http.listen(port, function(){
    console.log(`listening on *:${port}`);
});

app.use(baseUri, express.static('public'));

io.on('connection', function(socket){
    console.log('connection established '+ socket.id);
    socket.emit('msg', 'hello from server');
    socket.on('msg', function(data){console.log(data)});
});

/ socketapp / public / index. html

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">

        <!-- Using static client file because the normal /socket.io/socket.io.js doesn't work -->
        <script src="socket.io.js"></script>

    </head>
    <body>
       
        <h1>Index.html</h1>
        <script>
            // When the first parameter is empty, it's supposed to connect to wherever the file was served from
            let socket = io.connect('', {'path' : '/socketapp'});
            
            socket.on('msg', function(data){
                console.log(data);
                socket.emit('msg', 'hello from client');
            });
        
        </script>
    </body>
</html>
...