Можно ли использовать неблокирующую Java для описанного приложения? - PullRequest
1 голос
/ 22 августа 2010

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

Я хочу расширить этот TCPServer для обслуживания нескольких входящих сокетов (максимум 10 входящих сокетов). Поэтому мне интересно, должен ли я реализовать TCPServer с использованием неблокирующего ввода-вывода или использовать поток + блокирующий ввод-вывод.

Ответы [ 4 ]

0 голосов
/ 22 августа 2010

Я бы использовал потоки и блокировал ввод / вывод, пока вы не узнаете, что у вас есть как минимум 1000 одновременных подключений.Это также дает вам простой способ заставить его работать.Когда и если вы доберетесь до 1000, оцените.

0 голосов
/ 22 августа 2010

JBoss-Netty или Apache-Mina - это инфраструктура nio, которая предоставляет множество возможностей для реализации вашего собственного сервера. Итак, теперь я использую netty и доволен этим.

0 голосов
/ 22 августа 2010

Только с 10 входящими розетками, я не думаю, что эффект ясно виден. Что вам нужно сделать, так это сфокусироваться на верхнем уровне (протокол, приложение) и оставить эту низкоуровневую сетевую реализацию фреймворку. Я бы порекомендовал Apache Mina для этой работы. Как вы увидите, я очень хорошо справляюсь с блокировкой или неблокированием, вы выбираете; и оставьте открытые интерфейсы для реализации протокола и приложения.

0 голосов
/ 22 августа 2010

Пол Тайма недавно сравнил два подхода, породив разнообразных дискуссий . При определенных обстоятельствах современные библиотеки потоков могут превзойти java.nio.channels.Selector. Поскольку результат в некоторой степени нелогичен, вам, возможно, придется прототипировать оба, чтобы получить окончательный ответ.

...