我不能告訴你在這裏有多遠,所以原諒這些明顯的陳述。
有很多方法可以到這裏。它很大程度上取決於你的服務器框架想爲調用者做多少工作。例如,它可以只接受套接字,然後使用Socket
或關聯的輸入和輸出流調用handle
。或者你的框架可能需要一個對象和一組接口來代理。客戶端可以發送一個字符串和一個對象數組,您可以調用注入代理上的方法。
您似乎暗示某些客戶端可以作爲代理接口進行處理,但其他客戶端需要對輸入/輸出流進行較低級別的訪問。所以,你可以有你的最簡單的ClientHandler
接口,客戶端必須實現這樣的:
public interface ClientHandler {
public void handleClient(InputStream, OutputStream) throws Exception;
}
你的框架能夠然後提供各種實現方式/包裝。其中一個可以是代理處理程序,它可以將客戶端調用作爲ObjectInputStream
和輸出流。客戶端可以寫一個方法名和對象陣列的參數:
public class ProxyHandler implements ClientHandler {
private Object handler;
public ProxyHandler(Object handler) {
this.handler = handler;
}
public void handleClient(InputStream input, OutputStream output) throws Exception {
// creates the object i/o streams
// reads method string, object array, looks up methods in the handler obj by name
// loop until done
}
}
框架可以提供與線由行協議等其他處理的處理程序。
public interface LineByLineHandler {
public String handleLine(String line);
}
和包裝:
public class LineByLineHandlerWrapper implements ClientHandler {
private LineByLineHandler handler;
public ProxyHandler(LineByLineHandler handler) {
this.handler = handler;
}
public void handleClient(InputStream input, OutputStream output) throws Exception {
// creates the buffered i/o reader/writes
// reads a string string, calls the handler, writes the response
// loop until done
}
}
所以基本處理程序將是ClientHandler
和更多的功能可以由ProxyHandler
,LineByLineHandler
等提供..
希望這有助於。對不起,如果這是顯而易見的。評論和我會提高特異性的水平。