Как установить несколько потоков ввода-вывода между клиентом и сервером? - PullRequest
1 голос
/ 17 октября 2011

Я создаю пару клиент / сервер в Java, которая на данный момент поддерживает только чересстрочную текстовую связь через PrintWriters и BufferedReaders, обернутые вокруг потоков ввода-вывода как сервера, так и клиента.

Я хотел бы реализовать функцию, которая использует поток изображений [Ввод / вывод] для отправки BufferedImage с сервера клиенту через заданный интервал.

Проблема в том, что я хочу, чтобы BufferedImages отправлялся / получался в отдельных потоках, чтобы клиент / сервер мог по-прежнему отправлять / получать текстовые команды.

Могу ли я создать несколько потоков или сокетов? Если так, то это лучший способ?

Ответы [ 3 ]

7 голосов
/ 17 октября 2011

Один из способов сделать это с одним сокетом - это мультиплексирование отдельных потоков через один поток данных, подключенный к сокету, хорошая реализация этого - BEEP .

0 голосов
/ 13 мая 2016

Поток мультиплексирования должен поддерживать несколько буферов.

Читателю должен быть предоставлен собственный буфер потоком мультиплексирования. Поток мультиплексирования должен увеличивать каждый буфер во время операции записи и сокращать нужный буфер во время операции чтения.

С одним буфером перемотки сложнее управлять, поскольку считыватели должны быть с состоянием, но обычно они более масштабируемы, если не производительны.

Конкретный используемый протокол соединения является подробностью реализации. Сетевые сокеты являются просто буферами и могут использоваться для реализации мультиплексного потока. В этом случае узким местом становится сеть.

0 голосов
/ 17 октября 2011

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

Возможно, вам следует использовать пул потоков. Но это зависит от вашего приложения. Посмотрите на пакет java.util.concurrency.

Если у вас есть более конкретные вопросы, не стесняйтесь их задавать.

...