Помогите с правильным дизайном универсального Socket Server - PullRequest
0 голосов
/ 15 июля 2010

Я создал общий класс 'SocketServer' в Java, который принимает следующие аргументы: Строковый адрес, int порт, класс socketProtocol, String encryptionType, int backlogSize

По сути, я хочу, чтобы другие разработчики могли использовать этот класс в своих проектах и ​​установить несколько простых опций для шифрования, отставания, адреса, порта ... и в этот момент они должны разработать протокол. SocketProtocol - это интерфейс, который включает sendMessage и receiveMessage (наряду с несколькими другими). ​​

На этом этапе пользователь класса должен просто реализовать SocketProtocol и передать класс (то есть MySocketProto.class) экземпляру SocketServer, который, в свою очередь, создаст копию протокола для каждого входящего соединения через .newInstance () ;

Имеет ли это смысл? Есть ли более простой способ установить этот тип функциональности? Мне не нравится идея передачи типа класса на сервер, это кажется странным.

Спасибо всем, Chris

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Я бы использовал Фабричный шаблон в этой ситуации. Связанный пример Википедии немного многословен, но может быть очень простым:

public interface ISocketProtocolFactory {
    ISocketProtocol buildProtocol();
}

Ваш конструктор SocketServer затем возьмет экземпляр чего-либо, реализующего ISocketProtocolFactory, и запросит у него новые ISocketProtocol с, как это будет происходить.

Это даст вашим пользователям гораздо больше гибкости при создании экземпляров ISocketProtocol, позаботьтесь о «скверности» наличия параметра класса.

0 голосов
/ 15 июля 2010

Я бы предположил, что у каждого порта будет свой протокол. Имея это в виду, вы бы указали его для порта.

В прошлом я делал так, чтобы разработчики передавали класс, который наследуется от:

public Interface ProtocolInterface
{
   public void serve(InputStream in, OutputStream out) throws IOException
...

где InputStream и OutputStream - это вход и выход для Socket

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...