在cloudfoundry中延长连接超过30秒

时间:2012-07-11 10:21:11

标签: chat cloudfoundry

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

当我没有要传递的待处理消息时,我尝试将消息队列池化时出现问题。

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

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

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

1 个答案:

答案 0 :(得分: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);