2011-12-30 86 views
1

我正在創建一個使用ServerSocket的通用TCP/IP服務器,可供我的團隊正在處理的多個項目使用。我面臨的障礙是如何最好地注入一個Runnable工作者類,因爲各個項目將具有與客戶端進行交互的不同功能。如何將一個工人類注入到ServerSocket實現中?

這就是我現在得到:

Socket clientSocket = serverSocket.accept(); 
Runnable worker = WorkerFactory.getWorker(interfaceId, clientSocket, id); 
Thread t = new Thread(worker, "Client #" + id); 
t.start(); 

薪火interfaceId到服務器工程項目的一個子集,但是當所有可能的用途被認爲這不是一個可行的解決方案。

我在想一個使用泛型的工廠,或者可能以某種方式使用Spring框架,可能是要走的路,但我對如何去做這件事有點模糊。我搜索了,我一直無法找到有關爲ServerSocket實現注入工作的任何信息。任何建議,將不勝感激...

回答

0

我不能告訴你在這裏有多遠,所以原諒這些明顯的陳述。

有很多方法可以到這裏。它很大程度上取決於你的服務器框架想爲調用者做多少工作。例如,它可以只接受套接字,然後使用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和更多的功能可以由ProxyHandlerLineByLineHandler等提供..

希望這有助於。對不起,如果這是顯而易見的。評論和我會提高特異性的水平。

相關問題