Я не могу сказать, насколько далеко вы здесь, поэтому извините очевидные заявления.
Существует несколько способов, которыми вы можете пойти здесь. Это зависит от того, сколько работы ваша серверная инфраструктура хочет сделать для вызывающих. Например, он может просто принять сокеты, а затем позвонить handle
с Socket
или соответствующими потоками ввода и вывода. Или ваша инфраструктура может взять объект и массив интерфейсов для прокси. Клиент мог бы отправить строку и массив объектов, и вы могли бы вызвать методы для введенных прокси.
Похоже, вы подразумеваете, что некоторые клиенты могут обрабатываться как прокси-интерфейс, а другим нужен более низкий уровень доступа к потокам ввода-вывода. Таким образом, вы могли бы иметь свой простейший 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
и т.д ..
Надеется, что это помогает. Извините, если все это очевидно. Комментарий, и я увеличу уровень специфичности.