Используя C++/Qt4 приложение как бэкенд для веб-приложения

для одного из моих приложений я хотел бы обеспечить минимальный веб-интерфейс. Это базовое приложение записано в C++ и использует Qt4 в качестве платформы. Так как я также пользуюсь некоторыми библиотеками, которые я записал, чтобы вычислить некоторые вещи и сделать некоторое сложное управление данными, я хотел бы использовать этот существующий код как бэкенд к веб-интерфейсу.

Идея 1: Используя встроенный веб-сервер

Первая вещь, которую я попробовал (и который работал до некоторой степени) использовала встроенный веб-сервер (мангуста). Как можно предположить, это - просто очень тонкая библиотека, и необходимо реализовать много вещей сами (как управление сеансами, cookie, и т.д.).

Идея 2: Используя нормальный веб-сервер и добавление fcgi/cgi/scgi бэкенда к моему приложению

Следующая вещь, которая прибыла в мою голову, использовала сформировавшийся, но компактный веб-сервер (например, lighttpd) и простой предоставляют fcgi/scgi/cgi бэкенд ему. Я мог записать веб-приложение с помощью хорошей платформы, как Опоры, PHP или RoR, (...) и просто иметь префикс URL, как /a/... который позволяет мне непосредственно говорить с бэкендом.

Я пытался реализовать libfcgi в свое приложение, но это выглядит более грязным, чем необходимый (например, необходимо было бы реализовать собственные сокеты TCP/IP для передачи данных между приложением и веб-сервером и туннелем это через библиотеку FCGI, meh),

Идея 3: Создание версии командной строки моего приложения, которое делает самые основные вещи и использовать нормальный веб-сервер и платформу, чтобы сделать остальных

Это - третья идея, которая прибыла в мою голову. Это в основном о создании веб-приложения с помощью традиционного пути (PHP, RoR, и т.д.) и с помощью версии командной строки моего приложения, чтобы обработать данные и возвратить его при необходимости.


У меня есть некоторый опыт с созданием веб-приложений, но я никогда не должен был делать что-то вроде этого, таким образом, я хотел бы услышать некоторые идеи или предложения. Я хотел бы использовать JavaScript на браузерах (Ajax, который является), и передайте некоторые конструкции JSON между веб-браузером и сервером для создания пользовательского опыта немного более гладким.

Таким образом, каковы Ваши предложения, идеи об этом? Я не хочу изобретать велосипед, честно.

8
задан BastiBen 18 February 2010 в 08:52
поделиться

3 ответа

Я бы никогда не стал выставлять пользовательское написанное приложение в сеть в качестве внешнего интерфейса, поскольку для этого созданы серверы, такие как apache или lighthttp. Они дают вам серьезную защиту из коробки.

Что касается взаимодействия вашего приложения с этим веб-сервером, это немного зависит от нагрузки и опыта написания программного обеспечения на PHP, Python или других языках, поддерживаемых вашим веб-сервером (конечно, через интерпретатор).

Небольшая нагрузка, и инструмент командной строки, доступный из PHP, может сработать отлично.

Более тяжелая нагрузка, и вы, возможно, захотите реализовать простой (SOAP?) Сервер с Qt и получить доступ к нему из скрипта python (или php).

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

4
ответ дан 5 December 2019 в 18:59
поделиться

В настоящее время я изучаю похожую ситуацию (пользовательский бэкенд веб-приложения с использованием Qt), и наименее плохим вариантом является FastCGI. Нашел кое-что, что может вас заинтересовать. Не готово к производству без серьезного тестирования, но это может быть хорошей отправной точкой для взаимодействия Qt и FastCGI: FastCGIQt

3
ответ дан 5 December 2019 в 18:59
поделиться

Я использовал библиотеку FastCGI Protocol Driver для аналогичного проекта (тоже Qt-приложение), ссылка на скачивание находится в конце этой страницы [Libfastcgi]. Интеграция с приложением оказалась на самом деле сравнительно простой. В качестве веб-сервера использовался Lighttpd + mod_fastcgi. А вот про FastCGIQt ничего сказать не могу.

2
ответ дан 5 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: