2012-07-11 55 views
0

我想在java中開發一個聊天應用程序,並部署了一個使用RabbitMQ和Comet的示例應用程序。 我已經能夠發送和接收來自有界的RabbitMQ服務的消息。在cloudfoundry中延長連接超過30秒

當我沒有待處理消息傳遞時,嘗試將消息隊列集中起來時,會發生此問題。

而不是等待一個新的消息,並保持連接打開,我得到504錯誤代碼。

這我認爲是由於Cloud Foundry條件,請求必須在30秒內作出響應。

由於我想保持連接打開,直到我有一條消息傳遞給客戶端,有什麼方法可以解決這個問題。

回答

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); 
+0

感謝您的回覆。然而,即使我們設法保持30秒的窗口滾動,它的確對移動應用程序有影響,尤其是在電池使用方面。有沒有其他方法可以幫助我更好地進行聊天? – 2012-07-11 19:31:29

+0

如果您使用的是原生移動應用,則可以在新的聊天消息進入時使用推送通知服務:http://urbanairship.com/products/push-notifications/ – 2012-07-13 20:49:39