Предполагая, что вы не можете заменить материал на C ++, вот как я бы это сделал на макушке.
Я бы настроил один главный сервер. Этот сервер будет запускать процесс, который принимает запросы (возможно, по HTTP, так что это будет веб-служба), и я должен будет прочитать запрос, разобрать, что это такое, и затем вызвать правильное ведомое устройство. В основном это действует как прокси. Как только он получает ответ от подчиненного устройства, он пересылает его обратно вызывающей стороне. Простота здесь означает, что если вы начнете получать больше запросов одного типа, вы можете настроить для них дополнительные серверы и циклические запросы.
Подчиненными будут веб-сервисы, которые открывают программу C ++ и пересылают ввод и получают вывод. Это все, что нужно сделать.
Я не буду беспокоиться о сохранении открытых соединений (кроме как между ведомым устройством и программой C ++ на основе вашего описания). Простое использование веб-запроса для этого материала сохранит связь между ведущим и ведомым устройством открытым во время процесса, но это не должно быть проблемой. Таким образом, вам не нужно беспокоиться об этой детали.
Теперь, будь я на вашем месте, я бы серьезно задумался о том, чтобы переопределить код C ++ в Java или вызвать его через JNI или что-то в этом роде. Если вы можете избежать этого, я думаю, что избегание Java-оболочки вокруг C ++ было бы хорошей целью при разработке. Java может выполнить любой дорогостоящий процесс во время запуска один раз, а затем хранить все в памяти, как это делает код C ++.
Надеюсь, это поможет.