0

site / nリクエストをnode.js(ポート9000)に転送し、その他のリクエストをapache(ポート8000​​)に転送するようにnode-http-proxyを設定しています。これは、socket.ioを多用しており、apacheがwebsocketリクエストごとに1つのスレッドを作成することを望まないためです。

次のコードは、パブリックIPを介してアクセスできるようにするまではうまく機能します。my_public_ip / n / socket.io / socket.io /jsは「404NotFound」を返しますが、1つを除いてすべてが機能します。このリクエストはnode.jsによって黙って吸収されていないようです

httpProxy.createServer({
    router: {
        'localhost/n/': '127.0.0.1:9000',
        'localhost': '127.0.0.1:8000',
        'my_public_ip/n': '127.0.0.1:9000',
        'my_public_ip': '127.0.0.1:8000'
    }
}).listen(80);

function handler(req, res) {
    var pathName = url.parse(req.url).pathname;
    if(pathName.substr(0,2) == "//"){
        pathName = pathName.substr(1);
    }
    var pathSplit = pathName.split('/');
    nextURL = pathSplit.join('/').substr(8);
    if(pathSplit[1] == 'static'){
        fs.readFile(__dirname + '/static/' + nextURL, function(err, data) {
            if(err) {
                res.writeHead(404);
                return res.end('404 Not Found');
            }
            res.writeHead(200);
            res.end(data);
        });
    } else if(pathName !== '/'){
        fs.readFile(__dirname + '/index.html', function(err, data) {
            if(err) {
                res.writeHead(500);
                return res.end('Error loading file. Does it exist? (Reading ' + __dirname + ')');
            }
            res.writeHead(200);
            res.end(data);
        });
    }
}
4

1 に答える 1

0

ノードhttpサーバーは、socket.IOのクライアント側スクリプトを提供しています。何が起こっているのかというと、httpトラフィックをnode.JSにプロキシしていないため、クライアントのJSスクリプトを確認する方法がないということです。(Socket.IOは、socket.IO接続を介してJSスクリプトをプッシュしません。)

最も基本的な回避策は、Apacheサーバー上にJSスクリプトのコピーを作成することです。もう1つの方法は、スクリプトパス専用のルーティング命令を追加して、リクエストをNode.JSにルーティングすることです。前者の方がパフォーマンスが良くなると思います。

于 2012-12-10T22:54:00.530 に答える