我們需要設計一個服務器,該服務器將爲多個客戶端提供網頁,還需要爲這些客戶端查詢遠程數據庫。該項目的一個要求是整個系統必須符合REST架構風格。我們需要使用Java作爲編程語言,但是在設計它時出現了許多問題。關於套接字編程和REST設計
我們希望有一個主線程,將獲得連接,如本例所示:
// System.out.println("Starting a new web server using port " + port)
try {
ServerSocket reciever = new ServerSocket(port);
while (true) {
try {
Socket s = reciever.accept();
Client c = new Client(s);
} catch (IOException e) {
System.err.println("New item creation failed.");
IOUtil.close(reciever);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
System.err.println("ServerSocket problem.");
}
然後,每個連接將被創建爲一個新的線程(在代碼中的客戶對象),將採取關心閱讀一個請求。如果請求是GET,那麼線程將爲客戶端提供資源。如果它是一個POST,那麼它會將請求添加到緩衝區,並讓另一個線程處理對數據庫的查詢,並將答案返回給客戶端。在處理這個唯一的請求之後,線程關閉套接字並終止。
套接字是否違反了REST原則?爲了尊重REST架構,我們是否需要在每個HTTP消息之後銷燬每個Client對象(線程&套接字)?客戶端 - 服務器通信是否有另一種不使用套接字的方式?
爲什麼地球上不使用JEE?整個服務器事情都由你來處理,你所要做的就是決定一個函數應該監聽什麼路徑,並在其後面寫一些邏輯(如果你選擇使用servlet)。說真的,你不應該再浪費一點時間來重新發明輪子。 – thecoshman
好吧,我們看了看Apache HHTPComponents,它對我們的任務來說似乎是一個很好的API。這是你在說什麼? – tyrana4
什麼? AFAIK Apache與JEE無關。你會運行一個'容器',就像JBoss。這個容器可以管理所有無聊的網頁內容。然後你可以寫一個類(對於初學者),用'@Path('/ mySite/cakes /')'註釋一個函數,並且該函數將被調用任何與之相匹配的URL。 – thecoshman