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