Правильный способ порождения подпроцесса и подключения через сокет - PullRequest
0 голосов
/ 21 ноября 2011

Я поддерживаю довольно большое приложение, состоящее из графического интерфейса Java и движка C ++. Два компонента в настоящее время тесно связаны - пользовательский интерфейс загружает движок в виде библиотеки и передает объекты сообщений с помощью JNI. Я думаю о том, чтобы разбить движок как собственный процесс, который предоставит API для любого приложения, к которому можно подключиться через сокет (всегда только 1 клиент на 1 сервер).

В обычном случае запуск приложения будет состоять из:

  1. GUI находит неиспользуемый порт XXXX, порождает подпроцесс Engine с портом XXXX в качестве параметра
  2. Двигатель открывает прослушивающее гнездо на порту XXXX
  3. GUI подключается к порту XXXX
  4. GUI-Engine подключен через некоторый произвольно пронумерованный порт, и можно закрыть сокет сервера XXXX.

Но что-то кажется не совсем правильным - существует состояние гонки, при котором два приложения, запускающиеся одновременно, могут выбрать один и тот же неиспользуемый порт (перед тем, как запустить свои подпроцессы). Я могу обойти это, но это заставляет меня задаться вопросом, есть ли у меня какое-то базовое неправильное понимание отношений и / или как должно быть установлено соединение?

Спасибо!

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