4

これらは、私が使用しているノードと必要なモジュールのバージョンです:

  • Node.js: 0.10.16
  • Websocket ライブラリ: einaros/ws ws@0.4.28
  • プロキシサーバー: nodejitsu/node-http-proxy http-proxy@0.10.3

次のプログラムを実行すると、コンソール出力は次のようになり、このポイントを超えません。

$ node app.js
proxy: got upgrade, proxying web request
wss: got connection

コードは次のとおりです。

// app.js
// A simple proxying example
//
// Setup websocket server on port 19000
// Setup proxy on port 9000 to proxy to 19000
// Make a websocket request to 9000
//

var WebSocket = require('ws'),
    WebSocketServer = WebSocket.Server,
    proxy = require('http-proxy');

// goes in a loop sending messages to the server as soon as
// the servers are setup
var triggerClient = function() {
    var ws = new WebSocket('ws://localhost:9090/');
    ws.on('open', function() {
        console.log('ws: connection open');
        setInterval(function() {
            ws.send("Hello");
        }, 1000);
    });

    ws.on('message', function(data) {
        console.log('ws: got ' + data);
    });
}

// setup websocket server and a proxy
//
var go = function() {
    // setup a websocket server on port 19000
    //
    var wss = new WebSocketServer({ port: 19000 });
    wss.on('connection', function(ws) {
        console.log('wss: got connection');
        ws.on('message', function(data) {
            console.log('wss: got ' + data);
            ws.send('wss response: ' + data);
        });
    });


    // setup a proxy server
    var server = proxy.createServer(function (req, res, proxy) {
        proxy.proxyRequest(req, res, {
            host: 'localhost',
            port: 19000
        });
    });

    server.on('upgrade', function (req, socket, head) {
        console.log('proxy: got upgrade, proxying web request');
        server.proxy.proxyWebSocketRequest(req, socket, head, {
            host: 'localhost',
            port: 19000
        });
    });

    server.listen(9090, triggerClient);
};

process.nextTick(go);

私の問題は、最終的に Hipache を使用しようとしたときに始まりました。次に、node-http-proxy に単純化し、最後にこのコードに単純化しました。

WebSocket クライアントが接続しているポートを 9090 から 19000 に変更すると (プロキシをバイパスして)、正常に動作するように見えます。

提案、指針、フィードバックをいただければ幸いです。

ありがとう!

4

1 に答える 1

1

核となる問題は、node-http-proxy のマスター ブランチが node <= 0.8.x とのみ互換性があることです ( https://github.com/nodejitsu/node-http-proxy#when-to-use-node-を参照)。 http-proxy ): 0.10.x のサポートを実装するツリーがあります ( https://github.com/nodejitsu/node-http-proxy/tree/caronteを参照) 。いつマージされて利用可能になるかの兆候を見つけました。

于 2013-10-23T20:54:50.833 に答える