我正在尝试在java中开发一个聊天应用程序,并部署了一个使用RabbitMQ和Comet的示例应用程序。 我已经能够从有界RabbitMQ服务发送和接收消息。
当我没有要传递的待处理消息时,我尝试将消息队列池化时出现问题。
我没有等待新邮件并保持连接打开,而是收到504错误代码。
我认为这是由于Cloud Foundry条件导致请求必须在30秒内得到响应。
由于我想保持连接打开,直到我有一条消息要传递给客户端,我有什么办法可以克服这个问题。
答案 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);