ポート 80 で実行される node.js に http プロキシを記述しました。必要なのは、socket.io トラフィックをポート 9090 にリダイレクトし、標準の http トラフィックを 8080 の Apache にリダイレクトすることだけです。これが私のプロキシ コードです。
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 に直接接続します。
node-http-proxy により、socket.io アプリが xhr-polling モードで動作するようになります。クライアントは Chrome v.25 です
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 は同じですが、localhost は localhost:9090 に置き換えられます
私が言ったように、すべてうまく機能しますが、唯一の問題は、node-http-proxy が websockets から xhr-polling にフォールバックすることです。誰でも助けることができますか?