Я пытаюсь создать простое приложение для коллективного редактирования текста 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>