Какой шаблон проектирования OOD следует использовать для запроса сервер-дескриптор-клиент? - PullRequest
0 голосов
/ 23 октября 2011

Какой шаблон проектирования OOD следует использовать для запроса сервер-дескриптор-клиент?

Я предлагаю схему обмена сообщениями, которая позволяет осуществлять обмен информацией (т.е. сообщениями) между компонентами и приложениями.

схема обмена сообщениями (MEP) описывает схему сообщений, требуемую протоколом связи дляустановить или использовать канал связи.Существует два основных шаблона обмена сообщениями - шаблон запроса-ответа и односторонний шаблон.Например, HTTP является протоколом шаблона запроса-ответа, а UDP имеет односторонний шаблон.

http://en.wikipedia.org/wiki/Messaging_pattern

Я прав?лучшие идеи?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Будучи хорошо знакомым с клиент-серверными приложениями по UDP, я обычно использую шаблон наблюдателя, который очень полезен при получении пакетов из сети.Когда пакет приходит с удаленной машины, сокет принимает сообщение и передает его всем слушателям.Затем слушатели будут делать с полученными данными все, что хотят, как показано в примере ниже

public class MySocket {
   private socket rawSocket;
   private List<Listeners> dataListeners;
   //.. Initialization
   // This method gets called when data is received
   public receive(byte[] data){
       for(Listener listener : dataListeners) listener.processMessage(data);
   }
   public registerListener(Listener listener){
       dataListeners.add(listener);
   }
   public unRegisterListener(Listener listener){
       dataListeners.remove(listener);
   }
}
// Interface listener to be implemented by whoever want to receive data from a socket
public interface Listener{
   // Method to be implemented by any listener interested in receiving data
   void ProcessMessage(byte[] data);
}
public class MyListener implements Listener{
   @Override
   public void processMessage(byte[] data){
      // Do something with data...
   }
}
// All bits put together
MySocket mySocket = new MySocket();
socket.registerListener(new MyListener());
// Class MyListener can now receive everything that comes from a remote machine through the socket "mySocket"

Надеюсь, это поможет, С уважением,

0 голосов
/ 24 октября 2011

Если вы хотите использовать UDP (в одну сторону), HTTP (запрос-ответ без сохранения состояния) или какой-либо другой механизм, зависит от поведения вашего приложения.Там, где требуется обмен сообщениями в режиме реального времени (как в алгоритмической торговле), UDP является первым выбором, когда время отправки пакетов данных становится более важной надежностью пакетов данных.HTTP - это путь для веб-приложений.Однако это все протоколы для протоколов передачи сообщений.На уровне приложения здесь мои мысли.В клиент-серверном приложении обычно есть много клиентов, которые пытаются получить доступ к одному и тому же серверу.Таким образом, ваше серверное приложение должно быть способно отвечать нескольким клиентам параллельно.Таким образом, на уровне приложения вы должны поддерживать пул потоков , и каждый клиентский запрос должен обрабатываться в потоке из пула потоков.Прочтите ссылку, чтобы узнать больше о преимуществах использования пула потоков вместо создания потоков для каждого клиентского запроса.

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