Управление несколькими соединениями сокетов в приложении Java-сервера - PullRequest
3 голосов
/ 14 сентября 2011

В нашем новом проекте нам нужно реализовать серверное приложение. Этот сервер получает запросы на подключение от 50 000 (+) клиентов. Проблема в том, что эти соединения должны оставаться открытыми и где-то должны управляться. Приложение должно работать как телефонная станция. Таким образом, он может получать запросы подключенных клиентов и подключать их к другим (возможно, нескольким) клиентам, только если они также подключены. Собственный протокол используется. Мои вопросы:

Как (и где) управлять открытыми розетками? Должен ли я положить их в HashMap или что-то? Это звучит любопытно для меня. Но у меня нет опыта с таким количеством открытых связей.

Существуют ли какие-либо платформы, поддерживающие эти требования к соединению?

Спасибо за помощь!

1 Ответ

6 голосов
/ 14 сентября 2011

Как (и где) управлять открытыми розетками?Должен ли я поместить их в HashMap или что-то в этом роде?

Обычно каждый сокет будет управляться потоком, который будет отвечать за чтение и запись в сокет.У вас также был бы главный поток, который отвечает за получение всех запросов на подключение через предопределенный сетевой интерфейс и порт (используя класс ServerSocket API), который затем может передать фактическую работу обработки рабочим / подчиненным потокам.В этом случае вам следует обратить внимание на пул потоков для рабочих потоков, поскольку создание потоков 50 КБ, скорее всего, перегружает вашу ОС и оборудование.

Кроме того, если вы действительно управляете одновременными сокетами 50 КБ,Настоятельно рекомендуется использовать NIO API (java.nio. *) Поверх простого IO API Java, хотя я не видел слишком много проектов, требующих более 2-5 тыс. Одновременных подключений.В мире Java существует как минимум две известные платформы на основе NIO - Apache MINA и JBoss Netty .Однако я бы рекомендовал прочитать хорошо написанное руководство по NIO , прежде чем переходить к использованию NIO API или платформ NIO.

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