3

我們有兩個AppEngine(Java)應用程序。其中一個使用URLFetch來創建約會。在接收器中,我們添加了一項功能,我們使用Channel API來查看是否有任何開放頻道,並讓他們瞭解新數據。SocketTimeoutException使用URLFetch發送通道消息的服務

URLFetch調用失敗,返回SocketTimeoutException。接收器中的所有代碼都被執行(包括被通知的所有開放通道),但調用應用程序仍然會收到SocketTimeoutException。當我註釋掉頻道通知行時,沒有錯誤。

這隻發生在已部署的應用程序中,而不是在開發模式下。另外,這個調用並沒有達到URLFetch允許的60秒(甚至是10秒)超時。

+0

我們不可能在沒有看到代碼和堆棧跟蹤的情況下提供幫助。 – 2012-01-13 03:52:10

+0

我會整理一個樣本,但我們已經解決了它。不是直接通知通道,而是將請求發送到任務隊列。此隊列執行相同的操作,但不返回SocketTimeoutException。無論如何,原來只是一個標準的servlet,最後調用ChannelServiceFactory.getChannelService().sendMessage。 – 2012-04-29 12:57:25

+0

它必須是特定於您的應用程序的東西 - 絕對不是不可能從一個應用程序到另一個應用程序進行urlfetch! – 2012-04-30 05:16:32

回答

0

urlfetch的默認截止時間爲5秒,所以如果您的應用程序需要超過5秒來加載並執行處理程序,它將返回一個SocketTimeoutException

正如documentation描述,您可以設置一個較長的期限使用setConnectTimeoutsetReadTimeout

除了你的網址抓取調用,它是移動的API調用,可以延遲(即不需要一個好主意建HTTP響應),以一個task queue

  • 截止任務隊列請求較長(10分鐘,而不是60秒)
  • 任務將如不能
  • 重試
  • urlfetch超時也較長(10分鐘)