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