Здесь много вопросов по этой теме, большинство из которых не имеют значения, потому что я использую 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 для длительного чтения, и любая помощь будет принята с благодарностью!