Рубрики
Без рубрики

Сервер многопоточных словарей Java

Система построена по архитектуре клиент-сервер. Сервер использует пул потоков для управления входящими потоками… С тегами show dev, java, javafx, distributedsystems.

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

Основная причина выбора архитектуры сервера пула потоков по сравнению с простым многопоточным сервером заключается в более эффективном управлении машинными ресурсами. Контролируя максимальное количество потоков, мы можем свести к минимуму истощение ресурсов.

Используя пул потоков, мы можем ставить запросы в очередь и обрабатывать одновременно только ограниченное количество. Это также принесет пользу клиенту, так как одновременное выполнение большого количества запросов замедлит обработку всех запросов.

Сервер

Основная задача сервера – открыть сокет-соединение с клиентом, принять запрос клиента, обработать запрос и отправить ответ с соответствующими данными. Проектные решения на сервере заключаются в том, чтобы сделать его как можно более слабо связанным, чтобы можно было интегрировать новые реализации без особого рефакторинга.

Обработка сообщений

Сервер открывает порт для приема подключений. Когда соединение установлено, создается новый поток SocketHandler и добавляется в пул потоков. SocketHandler обрабатывает запросы от клиента, отправляет ответ обратно и закрывает соединение.

База данных

Постоянные операции с данными для сервера обеспечиваются интерфейсом хранилища словарей.

Обмен сообщениями

Интерфейс обмена сообщениями предоставляет средства для реализации протокола обмена сообщениями между клиентом и сервером.

Обработка запроса

Реализуя Службу словаря с реализацией Хранилища словарей, можно построить схему обработки запросов для сервера.

Кроме того, реализация интерфейса утилиты MethodResolver с использованием реализации службы словаря приведет к гораздо более простой обработке запросов. Каждый возвращаемый ответ должен содержать код из перечисления Codes для улучшения связи между сервером и клиентом.

Клиент

Клиент отправляет запрос на сервер и отображает ответ пользователю. Так же, как и сервер, дизайн направлен на создание слабо связанного кода для дальнейших расширений.

Обработка сообщений

Для каждого запроса, отправленного на сервер, класс SocketHandler отвечает за создание сокет-соединения, отправку запроса и после получения ответа закрытие соединения.

Обмен сообщениями

Интерфейс обмена сообщениями предоставляет средства для реализации протокола обмена сообщениями между клиентом и сервером. Чтобы избежать ошибок синтаксического анализа, необходимо использовать одни и те же реализации.

Обработка ответов

Класс Client Util предоставляет функцию для разрешения ответа, полученного от сервера, с использованием кода, отправленного вместе с ответом.

Полный исходный код проекта находится на GitHub:

eyuelberga/Многопоточный-Словарь-Сервер

Многопоточный сервер словарей, который позволяет одновременным клиентам искать значение слов, добавлять новые слова и удалять существующие слова.

Архитектура

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

Основная причина выбора архитектуры сервера пула потоков по сравнению с простым многопоточным сервером заключается в более эффективном управлении машинными ресурсами. Контролируя максимальное количество потоков, мы можем свести к минимуму истощение ресурсов. Используя пул потоков, мы можем ставить запросы в очередь и обрабатывать одновременно только ограниченное количество. Это также принесет пользу клиенту, так как одновременное выполнение большого количества запросов замедлит обработку всех запросов.

Дизайн

Сервер

Основная задача сервера – открыть сокет-соединение с клиентом, принять запрос клиента, обработать запрос и отправить ответ с соответствующими данными. Дизайнерские решения на сервере заключаются в том, чтобы сделать его максимально свободным…

Оригинал: “https://dev.to/eyuelberga/java-multi-threaded-dictionary-server-53ad”