Я разрабатываю небольшую программу клиент-сервер на Java.
Клиент и сервер связаны через одно TCP-соединение. Большинство частей обмена данными являются асинхронными (может произойти в любое время), но некоторые части я хочу быть синхронными (например, ACK для отправленной команды).
Я использую поток, который считывает команды из InputStream сокета и вызывает onCommand ( ) событие. Сама команда развивается с помощью Command-Design-Pattern.
Что было бы лучше всего (Java), чтобы включить ожидание ACK без пропуска других команд, которые могут появиться одновременно?
con.sendPacket(new Packet("ABC"));
// wait for ABC_ACK
edit1
Думайте об этом как о FTP-соединении, но данные и управляющие команды находятся в одном соединении. Я хочу поймать ответ на команду управления, когда поток данных в фоновом режиме работает.
edit2
Все отправляется блоками, чтобы включить несколько (разных) передач через одно и то же TCP-соединение (мультиплексирование)
Block:
1 byte - block's type
2 byte - block's payload length
n byte - block's paylod