2012-10-25 35 views
3

我在Heroku上有一個Node.js應用程序。我最近切換了一個長查詢來使用SSE(EventSource)。雖然它在我的機器上運行得非常好,但我仍然在我的GET請求上收到Error H15 (Idle connection)。 H15的描述說我每次交易的時間超過了55秒。但是我的整個查詢不會超過4-5秒。Heroku上的H15 SSE請求

此外,在閱讀描述之後,我在返回第一個字節(只是一個數字)之後立即返回查詢,在開始任何繁重的工作之前 - 它仍然不起作用。

我的問題/ s的是:

  1. 我需要做什麼才能讓這件事情該怎麼辦?一個HTTP頭參數?在客戶端JS方面的東西?我如何避免H15?
  2. 我想做一些不被Heroku支持的東西嗎?我不這麼認爲,因爲我有(GitHub上express-eventsource.herokuapp.com,來源:https://github.com/TravelingTechGuy/express-eventsource)在Heroku上另一個應用程序使用EventSource的成功

一如往常,感謝您的時間。

回答

7

亂投醫,改變和重新寫我的代碼,剖析網絡等之後,終於我的朋友(有沒有任何節點知識)想出了一個想法,把我在正確的軌道上:

它似乎這是一個域問題 - 根本不是代碼問題。
我設置了一個ANAME映射,事實證明,由於Heroku使用5個不同的IP地址,映射到其中的一個可能會導致SSE呼叫。基本上,mydomain.com顯示的IP與mydomain.herokuapp.com不同 - 意味着服務器試圖返回一個不同於發起呼叫的IP的響應,因此超時。

我放棄了ANAME而轉而使用CNAME(基本上,放棄裸露的mydomain.com轉而使用www.mydomain.com),現在它似乎正在工作。

結論:

  1. 並非一切是一個代碼問題 - 如果它運作良好,在一個環境中,而不是在另一個,這是一個配置問題
  2. 如果您有什麼糾纏太久,它有助於帶來一組新的眼睛。即使沒有主題專業知識,你會得到偉大的想法,你可以嘗試新的方法
  3. 1and1 DNS控制吸b @ lls。移出那裏
+0

僅有很短的更新:它是的確是一個領域問題。所有工作都很好(儘管緩慢Heroku ==慢Heroku :))。 –

+0

這個問題確實令人不快。您能否詳細說明從ANAME更改爲CNAME? –

+0

基本上,它意味着不使用'裸'域名,如mydomain.com。根據您的DNS控制(我使用GoDaddy),您應該能夠通過DNS管理設置子域(CNAME)。在這裏查看更多:https://devcenter.heroku.com/articles/custom-domains –

1

我遇到了Meteor應用程序的相同問題。突然之間,每次交互都會在應用程序中返回一個websocket錯誤,並在heroku上返回一個h15錯誤。我已通過將根網址更改爲裸域來解決此問題,然後將裸域轉發至www.example.com。希望這也能幫助別人。 我也完全以與@TravelingTechGuy上

同意不一切是一個代碼問題 - 如果它運作良好,在一個環境中,而不是在另一個,這是一個配置問題