Многопоточный сервер Java — UDP

#java #multithreading #udp

#java #Многопоточность #udp

Вопрос:

Как реализовать поток, который обрабатывает клиентские запросы на сервере с использованием UDP. Я где-то читал, что вы можете использовать ThreadPoolExecutor, использует ли этот метод нормально. Потому что в Интернете не так много статей, которые дают вам какие-либо примеры использования многопоточных UDP-приложений. Итак, мой вопрос в том, должен ли я использовать ThreadPoolExecutor? Есть ли у кого-нибудь пример того, как реализовать многопоточное UDP-серверное / клиентское приложение?

Это просто сделать с помощью TCP, поэтому я использовал многопоточность TCP, просто хотел понять, как работает UDP таким образом.

Ответ №1:

Дело в том, что исполнители здесь вообще не проблема. Не имеет значения, используете ли вы для этого ThreadPoolExecutor или используете ручные потоки. ThreadPoolExecutor или любой другой ExecutorService, если на то пошло, — это просто служба для управления потоками и соответствующей работы. Это не имеет никакого отношения к тому, что такое ваши RUnnable или Callable.

В вашей программе вы будете предоставлять исполняемым или вызываемым только исполнителю. ExecutorService не заботится о том, что находится внутри runnable, потому что его работа заключается в их выполнении. Таким образом, способ использования ExecutorService для TCP-сервера или UDP-сервера не меняется при работе с ThreadPoolExecutor. Просто измените RUnnable для отправки и все готово 🙂

Ответ №2:

Главный трюк с UDP заключается в том, что он ненадежен. Вы должны реализовать собственное обнаружение / обработку потерянных пакетов.

Как только у вас появятся запросы, вы можете использовать Executors.newXxxxxx() точно так же, как TCP.

Комментарии:

1. Привет, Питер, я действительно не возражаю, если пакеты будут потеряны. Могу ли я по-прежнему использовать ThreadPoolExector?

2. Executors — это вспомогательный класс для ThreadPoolExecutor. Вы можете использовать любой из них, но я бы использовал исполнителей, если сможете.