Использования узла HTTP-прокси, я настроить обратный прокси-сервер для запросов маршрутизации:socket.io примера иногда не подключается на сторону клиента при использовании обратного прокси-сервера
var httpProxy = require('http-proxy');
var server = httpProxy.createServer({
hostnameOnly: true,
router: {
'www.example.com': 'localhost:3002'
}
}).listen(80);
Теперь, когда я запустить первый пример на http://socket.io/#how-to-use, сокет иногда не соединяется с клиентом. Я создал два файла для проверки этого: server.js и index.html. Чтобы запустить приложение-узел, я запустил server.js.
server.js:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(3002);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
console.log("Socket connected");
});
index.html:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
setInterval(function() {
console.log(socket.socket.connected);
}, 1000)
</script>
Когда клиент не подключается, после того, как сокет соединяется с сервером, я неоднократно получаю следующее выход с интервалами +/- 10 секунд:
debug - setting request GET /socket.io/1/xhr-polling/Cqcw5xUjQ-B-Hw3FGF7Y?t=1385128607702
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client Cqcw5xUjQ-B-Hw3FGF7Y
Теперь, когда я обновляю браузер несколько раз, сокет всегда подключается к серверу (то есть он всегда регистрирует «Сокет подключен»), но иногда он не подключается к стороне клиента: console.log(socket.socket.connected)
иногда многократно печатает " false " после обновления индекса.html и после повторного обновления страницы он может повторно напечатать " true " или " false " еще раз, если сокет не подключался или не подключался к клиенту.
Пример работает на стороне клиента, когда я не использую обратный прокси-сервер, поэтому, когда я запускаю server.js на порт 80 на www.example.com. Было бы здорово, если бы кто-нибудь мог указать мне, что может быть причиной этой проблемы. Я использую node.js v0.8.23, версию socket.io 0.9.14 и версию-node-http-proxy версии 0.10.1.
UPDATE
Возможно, я на самом деле с помощью узла v0.10.21. Я думал, что использую v0.8.23, переключив версию узла с помощью nvm, но по какой-то причине он продолжает переходить на v0.10. Это known issue, что http-proxy не поддерживает веб-сокеты для версий узлов ниже 0,8, так что это может быть причиной. Я использую решение robertklep, пока не найду что-то лучше.
Приятно видеть, что ваша проблема решена! :) – robertklep