выбор из нескольких сокетов, которые готовы для чтения из - PullRequest
2 голосов
/ 17 августа 2011

Я пишу сервер-клиентское приложение. У меня есть сервер, который содержит несколько сокетов, которые я получил от метода accept () ServerSocket. Я хочу читать из этих сокетов, но я не знаю, из какого сокета можно читать. Мне нужен какой-то селектор, который выберет один из сокетов, с которых можно читать, чтобы я мог прочитать данные, которые он отправляет.

Спасибо.

1 Ответ

1 голос
/ 17 августа 2011

У вас есть два основных варианта:

  1. Имеют выделенную резьбу для каждого принятого сокета. Это потому, что «обычный» сокет ввод / вывод блокируется. Вы не можете выборочно обрабатывать несколько сокетов, используя один поток. А так как нет функции «заглядывания», вы всегда рискуете быть заблокированным при вызове read. При наличии потока на каждый сокет, который вы хотите прочитать, блокировка чтения не будет блокировать другие операции (потоки).
  2. Используйте NIO. NIO допускает асинхронные операции ввода-вывода, и в основном именно то, что вы просили - Селектор .

Если вы решите пойти NIO-way, я бы порекомендовал проверить MINA и Netty . Я нашел их гораздо проще работать, чем простой NIO. Вы не только получите более приятный API для работы, но, по крайней мере, у MINA также есть обходные пути для некоторых неприятных ошибок NIO.

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