Java NIO на сервере и клиенте? - PullRequest
2 голосов
/ 24 ноября 2011

Я новичок в Java NIO. У меня есть небольшое сомнение.Если я использую NIO вместо клиента сокета, должен ли сервер также использовать NIO или это не имеет значения?

Я обеспокоен масштабируемостью приложения.Я смотрю около 500-1000 клиентских запросов в секунду на сервер.Поскольку я отправляю свои данные как минимум на три разных сервера, в идеале я просматриваю около 1500 клиентских запросов в секунду.Для этого у меня уже есть реализация пула сокетов, которая делает довольно приличную работу.

У меня есть пул соединений сокетов для каждого сервера. Каждый поток выбирает доступное соединение сокетов из пула и отправляет его на сервер

Я пытаюсь выяснить, работает ли NIOможет помочь или лучше чем клиент сокета.Как насчет блокировки?Обычный клиент будет либо блокировать, либо тайм-аут.

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

Это не имеет значения. На поток TCP не повлияет выбранный вами NIO.

2 голосов
/ 24 ноября 2011

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

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

Обновление

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

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

...