Программирование сокетов TCP и многопоточность в java

Я хочу отправлять и получать данные между тремя компьютерами, используя сокет TCP в Java

  • Первый компьютер берет данные с клавиатуры и отправляет их второму компьютеру.
  • Второй компьютер берет данные с первого и отправляет их на третий компьютер.

Мой вопрос: могу ли я реализовать программу сокета TCP на втором компьютере (который получает данные с первого компьютера и одновременно отправляет их на третий) без использования многопоточности?


person MA.H    schedule 14.12.2015    source источник
comment
самая простая поддержка сокетов по умолчанию в java использует блокирующие API-интерфейсы ввода-вывода, для правильного использования которых требуется несколько потоков. Неблокирующие API могут быть однопоточными, но их гораздо сложнее использовать.   -  person jtahlborn    schedule 14.12.2015


Ответы (2)


Да, ты можешь. (но наверное глупо)

Просто привяжите порт и слушайте его на сервере 2. Сервер 1 подключается к серверу 2 и отправляет данные. Сервер 2 считывает данные, подключается к серверу 3 и отправляет ему данные в том же потоке.

Без многопоточности вы можете либо читать ввод с сервера 1, либо отправлять данные на сервер 3. Более того, вы можете обрабатывать данные с сервера 1 только по одному. Программа будет работать медленно (не быстрее, чем может быть при многопоточности).

person Prim    schedule 14.12.2015
comment
поскольку данные берутся с клавиатуры, скорости вашего однопоточного решения должно хватить. - person Alexei Kaigorodov; 14.12.2015

Вы должны сделать машину 2 сервером, который будет прослушивать некоторый фиксированный ip:port. Сделайте машины 1 и 3 клиентами, которые будут подключаться к машине 2 по фиксированному ip:port.

Что касается многопоточности, вы можете уменьшить количество потоков на своем сервере, используя опрос/выбор. Пожалуйста, обратитесь к ссылке Есть ли эквивалент epoll в Java?, которая объясняет опрос/выбор лучше.

person Ritesh    schedule 14.12.2015