0

Java でチャット アプリケーションを開発しようとしており、RabbitMQ と Comet を使用するサンプル アプリケーションをデプロイしました。バインドされた RabbitMQ サービスからメッセージを送受信できました。

この問題は、配信する保留中のメッセージがないときにメッセージのキューをプールしようとすると発生します。

新しいメッセージを待って接続を開いたままにする代わりに、504 エラー コードが表示されます。

これは、リクエストに 30 秒以内に応答する必要があるという Cloud Foundry の条件によるものだと思います。

クライアントに配信するメッセージがあるまで接続を開いたままにしたいので、これを克服する方法はありますか。

4

1 に答える 1

1

CloudFoundry.com ルーターには 30 秒のタイムアウトがあり、504 エラーが発生します。長い接続は 30 秒のローリング ウィンドウで開いたままになる可能性があります。つまり、504 エラーの発生を防ぐために、アプリケーションは 30 秒ごとにデータを送信する必要があります。たとえば、25 秒ごとに合計 75 秒間、クライアントに応答を送信する単純な node.js アプリを次に示します。

var http = require('http');
var host = process.env.VCAP_APP_HOST || "127.0.0.1";
var port = process.env.VCAP_APP_PORT || 4567;

http.createServer(function (req, res) {
  setTimeout(function() {
    res.write('1');
    setTimeout(function() {
      res.write('2');
      setTimeout(function() {
        res.write('3');
        res.end();
      }, 25000);
    }, 25000);
  }, 25000);

}).listen(port,host)

console.log('Server running at http://' + host + ':' + port);
于 2012-07-11T17:55:40.373 に答える