2012-01-07 40 views
1

我正在構建一個HTTP API,它在後臺執行大量的站點刮擦操作。如何在Play Framework中的請求之間保留一個大的,不可序列化的對象?

「網站抓取」部分是微不足道的 - 我使用HttpUnit的WebConversation對象代表瀏覽器。

但我需要堅持API請求之間的這個WebConversation對象。

不幸的是,WebConversation不是Serializable。它也相當大。

那麼,如何在請求之間可靠地保持一個很大的,不可序列化的對象?

我可以簡單地創建一個靜態列表並自己管理它嗎?這個對象也必須可以從Play中訪問!後臺工作。

PS高可用性在這裏不是一個問題 - 我可以將會話連接到服務器。

+0

你只有一個玩!服務器正在運行,還是您預計會有幾個? – Todd 2012-01-07 21:16:46

+0

@Todd:會有多個服務器在運行,但幸運的是,將會話連接到服務器是可以接受的。雖然負載平衡和HA需要多個服務器,但我的客戶完全可以接受會話不能在服務器之間遷移。 – qertoip 2012-01-08 13:00:15

回答

1

如果高可用性和擴展不是需求,那麼沒有理由不保留一個singleton類,它包含一個WebConversation對象的映射圖,可以存儲在會話cookie中。

這樣做的一個主要缺點是它打破了Play的無狀態本質,這意味着如果您確實需要在單個服務器上擴展您的應用程序,那麼您將不得不從根本上改變應用程序的設計。

你可以看看Zenexity的一位開發人員在play2寫的this application。它是一種屏幕抓圖Web服務,使用一些可能更適合您的應用程序的酷技術。

+0

感謝您的回答。縮放*是重要的要求。事實上,從一開始就會有多個服務器。然而,將站點抓取會話粘貼到服務器是可以接受的(並且如果這個特定的服務器關閉,可能會丟失它)。 – qertoip 2012-01-08 13:03:27

相關問題