2012-05-16 57 views
1

我有一臺服務器/客戶端的設計和 難怪有點麻煩,如果任何人有任何意見。節儉服務器門面,爲客戶

我有一個抽象數據存儲的Thrift服務器。這個想法是, 會有一些客戶端實質上是 的進程外插件,它們使用服務器提供的接口 來接收,操作底層數據存儲並且還提供他們自己的數據 。 會有一些其他客戶端,它們只是訪問服務器及其「插件」提供的數據 。

問題的情況是,這些「插件」的一個希望提供其 自己的數據和提供對數據的接口。 服務器應該不知道插件數據或接口。

我希望所有的客戶都能夠通過 主要的節儉服務器訪問功能,因此它充當插件的外觀。如果客戶端 請求插件提供的一些數據,主服務器可以委託給插件來提供該數據。我想這將意味着 有每個插件是一個節儉的客戶端和服務器。我已經寫在python的 服務器,這樣也許可以應付節儉調用,沒有 尚未定義,但有可能這些調用另一個 節儉服務器IE充當代理轉發?

另一種可能是有插件只能是客戶端和數據推 到服務器。但是這些消息的格式對於服務器來說是未知的,並且必須足夠通用以適應不同類型的數據。我不知道如何爲其他客戶端提供此數據的有用接口 。

就我所見,只有插件知道如何存儲和操作它所擁有的數據,因此這個想法可能不起作用。

感謝您的任何建議。歡迎任何建議。

+0

爲了闡明這裏使用的術語:是**插件**在Thrift服務器中託管的Thrift服務(與相關的python代碼 - gen)? **客戶**是否使用從特定插件生成的代碼,但實際上是Thrift服務器的客戶端? – Brady

回答

0

聽起來就像您需要某種機制來將請求與可用的不同插件相關聯。理想情況下,爲每個插件發佈的每組操作應該有不同的URL路徑。

我會考慮實現一種地圖/字典的URL路徑插件。然後,對於收到的每個請求,在地圖中查找並獲取關聯的插件並相應地向其發送請求。如果地圖中沒有條目,則可以發送重定向/代理。例如,如果URL = http://yourThriftServer/path/operation,操作或路徑操作將映射到一個插件。

一個額外的步驟將是實現某種元的請求,由此客戶可以查詢哪些URL路徑/操作是在服務器中使用。

相關問題