私はポート80で動作するnode.jsにhttpプロキシを書いています。私が必要とするのは、socket.ioトラフィックをポート9090にリダイレクトし、標準HTTPトラフィックを8080上のApacheにリダイレクトすることです。私のプロキシコードはnode.js:他のポートへのプロキシWebソケット
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);
すべて動作しますが、io.socketはxhr-pollingに戻ります。
http://localhost/client.htm - falls back to xhr-polling
file:///C:/.../client9090.htm - still uses websocket
socket.ioアプリはポート9090で実行されている、client.htmは80に接続し、client9090.htmは9090それはノード-HTTPプロキシのように見える
に直接接続socket.ioアプリを作りますxhr-pollingモードで動作します。 クライアントが
socket.ioアプリコード
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);
});
});
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が同じクロムV.25であるが、ローカルホストは、ローカルホストで置き換えられている:9090
私が言ったように、everythigはうまく動作しますが、問題はnode-http-proxyがwebsocketsからxhr-pollingにフォールバックすることだけです。 誰も助けることができますか?あなたは上記の使用のための
httpProxy = require('http-proxy');
// added `var server =` here
var server = 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);
// added upgrade listener section here:
server.on('upgrade', function (req, socket, head) {
server.proxy.proxyWebSocketRequest(req, socket, head);
});
しかし、:https://npmjs.org/package/http-proxyによると