Napisałem serwer proxy http w węźle node.js działającym na porcie 80. Potrzebuję jedynie przekierowania ruchu socket.io do portu 9090 i standardowego ruchu http do Apache w 8080. To jest mój kod proxy:node.js: proxy websockets do innego portu
httpProxy = require('http-proxy');
httpProxy.createServer(function (req, res, proxy) {
if (req.url.match(/socket.io/)) {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 9090
});
} else {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 8080
});
}
}).listen(80);
Wszystko działa, ale io.socket wraca do Xhr-pollingu.
http://localhost/client.htm - falls back to xhr-polling
file:///C:/.../client9090.htm - still uses websocket
socket.io aplikacja jest uruchomiona na porcie 9090, client.htm łączy się 80 i client9090.htm łączy się bezpośrednio 9090.
To wygląda jak węzeł-http-proxy sprawia socket.io aplikację pracować w trybie xhr-polling. Klienta Chrome V.25
kod socket.io aplikacja
var io = require('socket.io').listen(9090);
io.on('connection', function (socket) {
socket.on('hi!', function (data) {
console.log(data);
socket.emit('news');
});
socket.on('ahoj', function (data) {
console.log(data);
});
});
kod client.htm
<script src="http://localhost/socket.io/socket.io.js"></script>
<script>
var chat = io.connect('http://localhost')
chat.on('connect', function() {
chat.emit('hi!');
});
chat.on('news', function() {
chat.emit('ahoj',{a:1,b:2});
});
</script>
client9090.htm jest taka sama, ale został zastąpiony przez localhost localhost: 9090
Jak już powiedziałem, everythig działa dobrze, tylko problem polega na tym, że node-http-proxy sprawia, że wraca z websockets do Xhr-polling. Czy ktoś może pomóc?