диспетчер веб-сервисов - PullRequest
0 голосов
/ 17 июня 2011

Вот моя проблема: у меня есть приложение на C ++, которое состоит из Qt GUI и довольно большого количества внутреннего кода. В настоящее время он связан в один исполняемый файл и работает на Solaris. Теперь я хотел бы запустить графический интерфейс в Windows и оставить оставшуюся часть кода работающей в Solaris (портирование будет огромным усилием). Интерфейс между GUI и backend довольно чистый и состоит из одного абстрактного класса C ++ (также использует несколько контейнеров stl). Это та часть, которую я хотел бы превратить в веб-сервис.

Проблема в том, что наш внутренний код не является потокобезопасным, поэтому мне нужно будет запустить отдельный процесс в Solaris для каждого графического интерфейса в Windows. Однако по соображениям производительности я не могу запустить и завершить процесс для каждого запроса из графического интерфейса.

Этот дизайн означает, что мне нужно позаботиться о нескольких проблемах:

  • должна быть единая точка контакта для кода GUI,
  • связь должна происходить с экземпляром, запущенным во время первого вызова (он должен быть перенаправлен или первый вызов должен возвращать адрес фактического экземпляра сервера),
  • должно быть несколько сообщений поддержки активности, отправляемых между графическим интерфейсом и серверным процессом для управления временем жизни серверного процесса (серверный процесс не может работать вечно).

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

1 Ответ

1 голос
/ 17 июня 2011

Технически вы можете настроить Apache httpd для создания нового экземпляра для каждого соединения.Конфигурация также позволяет вам управлять временем, в течение которого процессы остаются активными в режиме ожидания, и количеством процессов, которые нужно оставить работающими как минимум.Это будет хорошо работать до тех пор, пока веб-сервис не имеет состояния.Немного странно, но технически выполнимо.

Если вы используете что-то вроде gSoap, вы можете скомпилировать ваши классы C ++ в Solaris непосредственно в мод gSoap и вам не придется адаптировать его к любому внешнему интерфейсу, например PHP илиДжава.Он просто подключится к Apache httpd и начнет работать.

Edit:

Я только что подумал об этом, и вы, вероятно, могли бы использовать HTTP 1.1 keep-alives для управления жизненным циклом процесса.,Apache позволяет вам настроить время, в течение которого он будет оставаться открытым, что поддерживает активный поток / процесс для соединения.

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