2011-01-07 33 views
1

我對我正在處理的應用程序的設計有疑問。轉發HTTP來自HTTP服務器的REST滿API請求到我的應用程序

我做了一個整體的Java應用程序,其插座全天候開放,類似於遊戲服務器。我只是想說這是一個單獨的jar應用程序,而不是基於模塊化servlet /頁面的web應用程序。

我現在想爲此應用程序添加一個RESTful API。所以人們/客戶可以向我的應用程序發出HTTP請求以獲得某些信息。由於我的Java應用程序的單一性質,我不確定如何實現這一點。另一個重要的事情是:我期望每秒有多個請求,所以如果我可以讓現有的http服務器處理請求,並以某種方式將它們轉發給我的應用程序來設置回覆,並讓http服務器發送它再次。

我想到的一些事情包括:

  • 纏上了我的應用程序將在Tomcat應用程序,雖然我不知道如果Tomcat可根據用戶要求運行的應用程序,而不是連續的映射的servlet。

  • 打開一個套接字並解析傳入的http請求我自己(或者有一個合適的lib嗎?)。我擔心這會對性能產生影響,寧願使用現有的http服務器,因爲它們針對高流量進行了優化。

  • 使用令人興奮的http服務器來處理請求(apache,lighttp,...)並通過scgi之類的東西將請求轉發給我的應用程序,或者使用可以通過XMLRPC轉發的服務器。有沒有其他的技術/協議可以做到這一點?

有關如何處理此問題的任何建議? 謝謝!

回答

0

我會盡可能地將您的RESTful服務端點與原始應用程序分離。這使您可以擴展(爲REST端點添加多個服務器),還可以更改原始應用程序,而無需直接更改REST API。

Clients <== REST (HTTP) ==> RESTful endpoint <== legacy (sockets) ==> Legacy backend

所以你的REST服務器是一個手一個服務提供商爲您的客戶,但同時也爲你原來的後端客戶代表。

我會設計RESTful API,然後爲Restlet選擇一個現有的REST框架,並實施REST服務本身。同時,您可以使用套接字開始在REST服務器和原始後端之間實現網關。

注重可伸縮性和性能(例如,您可能需要使用連接池的rest <=> backend橋樑,而不是產卵每一個進入API請求插槽),也認爲HTTP的可能的優點。只要您的後端應用程序邏輯允許,您可以使用緩存等。

相關問題