Обновленный ответ
Я наконец-то нашел способ заставить это работать.Это совсем не очевидно, но при размещении socket.io в подпапке вы НЕ используете подпапку в операторе connect.Это то, что я делал раньше, и клиент никогда не получал ответ.
Не работает
<script src="/test/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8080/test/', {resource:'test/socket.io'});
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
http://localhost:8080/test/ Это та часть, котораясбрасывает вещиЭто создает пространство имен для локального сокета, который не учитывает сторона сервера.Таким образом, клиент отправляет сообщение в пространство имен «/ test /», но ответы сервера переходят в пустое пространство имен », поэтому клиент никогда не получает сообщения.Обходной путь - просто удалить «/ test /» и убедиться, что вы используете переменную ресурса на клиенте и сервере.
Работаю!
<script src="/test/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8080', {resource:'test/socket.io'});
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Надеюсь, это поможет вам добиться успеха.
Оригинальный ответ
Это не проблема с вашей настройкой, это проблема socket.io, не желающего работать с подпапкой.Готов поспорить, что если вы уроните / сокеты, ваш пример будет работать нормально.Я столкнулся с точно такой же проблемой при использовании http-node-proxy при попытке размещения соединений socket.io в подпапках.Некоторое время назад была создана ошибка, но она была закрыта и никогда не устранялась.
https://github.com/LearnBoost/socket.io-client/issues/185
https://github.com/LearnBoost/socket.io/issues/320
Я все еще ищу решение какхорошо, но у меня есть ощущение, что мне придется закатать рукава и сами покопаться в коде.