0

我正在尝试用 java 开发一个聊天应用程序,并部署了一个使用 RabbitMQ 和 Comet 的示例应用程序。我已经能够从有界的 RabbitMQ 服务发送和接收消息。

当我在没有待传递的消息时尝试将消息汇集到队列中时,就会出现问题。

我没有等待新消息并保持连接打开,而是收到 504 错误代码。

我认为这是由于 Cloud Foundry 条件要求必须在 30 秒内响应请求。

由于我想保持连接打开,直到我有消息要传递给客户端,有什么办法可以克服这个问题。

4

1 回答 1

1

CloudFoundry.com 路由器有 30 秒超时,这会导致 504 错误。长连接可能会在 30 秒的滚动窗口中保持打开状态,这意味着应用程序必须每 30 秒发送一次数据以防止发生 504 错误。例如,这是一个简单的 node.js 应用程序,它每 25 秒向客户端发送一次响应,总共 75 秒:

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 回答