Посоветуйте embedded WEB-сервер для GUI-приложенией

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение Снег Север » 15.01.2020 09:25:08

tsknv писал(а):В общем задача которую я пытаюсь решить выглядит примерно так: Создать приложение состоящее из одного exe файла и файла БД которое висит на 80 порту.... ну в общем чтобы к нему браузером можно было подключиться... типа Web-интерфейс к БД.

Вам нужен для этого не "сервер", а банальный isapi сервис для IIS. На делфи начиная с ХЕ7, минимум, он делаеться "на тьфу", в несколько кликов. Сам делал такие не один раз. В лазаре никогда не делал, посмотрите тут: https://forum.lazarus.freepascal.org/in ... ic=36104.0
В делфи из этого сервиса можно элементарно сделать и "сервер" - exe файл, но, как правило, это менее удобно. Ведь файл надо запускать самому, а сервисом управляет IIS.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение debi12345 » 15.01.2020 11:54:37

или FPC умеет компилировать из исходников на C чтобы можно было исходный код libLightHTTPD использовать в проекте Lazarus?

С-шные исходники ессно не компилит, но линковаать в паскальные проги С-код из *.dll, *.o и *.a умеет.
С++-код пока не умеет (АФАЙК), а С-шный умеет с самого начала, вся GUI-отрисовка через него делается.
Oops - перепутал c libMicroHttpd. Байндинги и примеры к libMicroHttpd есть в официальном релизе FPC.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение tsknv » 15.01.2020 13:01:17

debi12345 писал(а): ... Байндинги и примеры к libMicroHttpd есть в официальном релизе FPC.

Вы имеете в виду примеры которые лежат в папке Lazarus\fpc\3.0.4\source\packages\libmicrohttpd\ ?
Я правильно думаю что там все сводится к динамической загрузке библиотеки libmicrohttpd-10.dll (если о Windows говорить) и использовании ее функционала? или нет?
tsknv
новенький
 
Сообщения: 14
Зарегистрирован: 25.09.2015 08:09:26

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение debi12345 » 15.01.2020 14:27:22

Я правильно думаю что там все сводится к динамической загрузке библиотеки libmicrohttpd-10.dll (если о Windows говорить) и использовании ее функционала? или нет?

Можно и так - если юзать DLL-версию libMicroHttpd.
Насчет можно ли статичеcки залинковать код из O- или A- или LIB-файлов этой либы... пипл уже поднимал эти темы:
https://fpc-devel.freepascal.narkive.co ... on-windows
http://free-pascal-general.1045716.n5.n ... 14241.html
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение Alex2013 » 15.01.2020 15:08:34

tsknv писал(а):
Alex2013 писал(а):...Вот скрин гибрид сервера и браузера(вполне себе GUI приложение на Лазарусе)....

Подскажите какие компоненты использовали? brookframework(TBrookHTTPServer)?

Добавлено спустя 6 минут 48 секунд:
В общем задача которую я пытаюсь решить выглядит примерно так: Создать приложение состоящее из одного exe файла и файла БД которое висит на 80 порту.... ну в общем чтобы к нему браузером можно было подключиться... типа Web-интерфейс к БД. Примерно так.

Использую обычный synapse (http://synapse.ararat.cz/ )
Начинал я вот с этого кода там все достаточно просто
:arrow: WEB2.ZIP
( в папке с бинарником создаешь каталоги
'htm', 'css', 'txt', 'jpg' ,'png' куда раскидываешь веб- контент )
Порт сервера задается в UTServer.pas
Код: Выделить всё
procedure   TTCServer.Execute;   // основной цикл
begin
...
      bind(CurIP,'81');// Кстати в винде порт  80  обычно закрыт .
....
end;

Запускаешь нажимаешь старт и пишешь в браузере что-то вроде http://127.0.0.1:81/1.txt (создав 1.txt в каталоге TXT )
Что-то на подобии "генерации динамической страницы по запросу" можно видеть по 127.0.0.1:81/index.htm

Подделка не ахти какая шикарная, но работает ... Важно не забывать, что генерации динамической страницы должна происходит быстро и не кушать ресурсы (иначе даже с десяток одновременных запросов станут для сервера настоящей "ДДОС атакой ") если требуется обработка данных вешаешь страницу ожидания и по таймеру в Ява-скрипте раз в секунду проверяешь окончание процесса(запущенного в отдельном потоке ).
Зы
Код под виндовс но легко адаптируется под линукс
http://www.freepascal.ru/forum/viewtopi ... =5&t=10482
Последний раз редактировалось Alex2013 15.01.2020 15:56:39, всего редактировалось 4 раз(а).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение vada » 15.01.2020 15:18:27

Вообще то паскаль для таких задач сложноват и многоделен (много писать кода надо).
Подобные вопросы давно хорошо решены на JAVA. (с объектного паскаля на java перейти проблем нет)
На JAVA есть сервера приложений. Их много. Из доступных GlassFish https://ru.wikipedia.org/wiki/GlassFish, JBoss https://ru.wikipedia.org/wiki/WildFly, Apache Struts https://ru.wikipedia.org/wiki/Apache_Struts. Есть попроще (контейнеры сервлетов), например, Apache Tomcat https://ru.wikipedia.org/wiki/Apache_Tomcat.
С SQL сервером коннектятся на ура (JDBCI). Автоматически строят нижний уровень структуры базы данных. Поддерживают роли пользователей.
Да всего и не перечислишь. Книгу писать на буду.
Все клиенты работают хоть через GUI, хоть через браузер.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение Alex2013 » 15.01.2020 15:30:03

Все зависит от уровня проекта . Если нужно предать по "веб-интерфейсу" одну картинку или кусок текст то даже приведенная выше программа класса "проще некуда" будет излишне сложной. Если нужно надежно и просто сделать условно "однопользовательский веб-интерфейс" то хватит и чего-то вроде этого Web2 ( то есть любого слегка дописанного до уровня прикладной программы примера автономного веб-сервера )
Ну а если нужно что-то 100% многопользовательские на несколько тысяч пользователей то лучше смотреть в сторону "настоящего веб-сервера" с крутящемся под ним "классическим веб-приложением".
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение tsknv » 15.01.2020 17:29:54

Информации много, все сразу в голову не входит :)
По ходу обдумывания возможных вариантов еще появился вопрос безопасности т.е. использования https, похоже что с этим совсем плохо если не использовать в том или ином виде какой-то из готовых web-серверов.
Интересно когда работает CGI/FastCGI за шифрование отвечает Web-сервер? или само CGI-приложение?
tsknv
новенький
 
Сообщения: 14
Зарегистрирован: 25.09.2015 08:09:26

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение debi12345 » 15.01.2020 20:06:17

т.е. использования https

В микроХттпд оно есть (examples/demo_https.pas)

Добавлено спустя 3 минуты 26 секунд:
Интересно когда работает CGI/FastCGI за шифрование отвечает Web-сервер?

С недавних пор и доменная система имен. Теперь браузером на HTTPS-сервер просто "по цифровому IPшнику" без матюков не зайдешь :roll:
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение Ichthyander » 15.01.2020 21:24:51

Использую https://github.com/risoflora/brookfreepascal для работы веб-сервера. Достаточно удобный роутинг url, обработка запросов клиентов. Есть примеры. По логике работы не так сильно отличается от fcl-web. Правда не в составе GUI приложение. Но где-то попадалось на глаза на форуме, что используют и для GUI. Также есть https://github.com/risoflora/brookframework, который еще совместим с Дельфи, но использует дополнительную библиотеки вроде LightHTTPD (sagui)

Добавлено спустя 2 минуты 24 секунды:
У brookfreepascal также есть полезные плагины для работы с почтой, ОРМ для работы с базой, готовые дженерики для обработки GET/POST параметров, работа с почтой, с телеграм и другие полезности

Добавлено спустя 42 секунды:
Лушче брука я думаю может быть только Мормот возможно, но последний не пробовал. Мне хватает брука
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение Alex2013 » 16.01.2020 01:02:49

tsknv писал(а):Информации много, все сразу в голову не входит :)
По ходу обдумывания возможных вариантов еще появился вопрос безопасности т.е. использования https, похоже что с этим совсем плохо если не использовать в том или ином виде какой-то из готовых web-серверов.
Интересно когда работает CGI/FastCGI за шифрование отвечает Web-сервер? или само CGI-приложение?


Если у тебя есть "Свой веб-сервер в деревне" то ничего не мешает шифровать данные любым простым и не очень алгоритмом и расшифровать на клиентской машине (можно просто через "одноразовые " скрипты встроенные в странички, можно через свой клиентский браузер ) Но вообще что за проблемы при широком распространении VPN протоколов ? Это всяко надежнее любого https !

К тому-же для защиты от сниффера и последующего тупого парсинга трафика ИМХО вполне хватит "связки-ключей" в cookie или набора клиентских скриптов отсылаемых пользователям в архиве по емейлу (в духе "для окончания регистрации прейдите по этой ссылке" ).
Зы
Прелесть самостоятельного шифрования вместо https в не нужности использования внешней системы сертификатов.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение tsknv » 16.01.2020 07:14:12

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

Задача(в идеале): Создание GUI Windows приложения, состоящего из одного (файлы относящиеся к БД не считаем) самодостаточного exe, предоставляющего доступ по протоколу HTTP/HTTPS к базе данных. Чтобы для пользователя было минимум заморочек, типа запустил exe, указал где база лежит и можно работать.

Понятно что https не панацея, но лучше чем ничего. Некий промежуточный вариант между использованием тотального шифрования типа VPN и полным отсутствием безопасности при использовании HTTP. Лучше иметь возможность использовать HTTPS чем нет.

fpWeb(fcl-web), BrookFreePascal
Дополнительных библиотек не требуется.
Нет поддержки HTTPS.
Нет возможности использовать в GUI приложениях.

BrookFramework
Работает на основе LightHTTPD ??, или это какой-то самостоятельный проект -> https://risoflora.github.io/libsagui-docs/index.html, требуется библиотека libsagui-2.dll.
Есть возможность использования в GUI приложении.
Не пробовал, но судя по документации заявлена поддержка https, также у компонента TBrookHTTPServer есть свойство Security, как я предполагаю, отвечающее за работу по hhtps
TBrookHTTPServerSecurity.jpg


Libmicrohttpd (Lazarus\fpc\3.0.4\source\packages\libmicrohttpd\)
Работает на основе LibMicroHTTPD.
В принципе тоже самое что и BrookFramework, так же есть поддержка https и требуется внешняя библиотека libmicrohttpd-10.dll .
В отлтчии от BrookFramework не имеет обертки в виде визуальных компонентов .

Приложение CGI/FastCGI/ISAPI
Не вникал, но очевидно, что от пользователя потребуется установка и настройка Web-сервера, установка на этот сервер приложения.
Зато вопросы безопасности, различных атак на сервер – это проблемы сервера а не приложения.

p.s. Может быть есть еще какие-то варианты решения задачи?


p.p.s.
Ichthyander писал(а):... Лушче брука я думаю может быть только Мормот возможно...

Надо посмотреть что такое Мормот...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tsknv
новенький
 
Сообщения: 14
Зарегистрирован: 25.09.2015 08:09:26

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение debi12345 » 16.01.2020 09:56:52

Приложение CGI/FastCGI/ISAPI

CGI - как правило консольная прога, которая принимает в свой стандартный ввод данные, переданные от HTTP[s]-сервера(который принимает клиентские запросы, авторизует, декодирует и вырезает HTTP-заголовки и расшифровывает HTTPS). Минус CGI - через него не сделаешь WebSocket (нужно держать в уме на случай апгрэйда проекта) и прочий дуплекс.

Добавлено спустя 3 минуты 24 секунды:
Надо посмотреть что такое Мормот...

Не стоит пугаться DLL в проекте. В "винде" DLLы можно класть в один каталог с экзэшкой проги (каталог поиска библиотек по умолчанию)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение tsknv » 16.01.2020 10:28:54

debi12345 писал(а): ... Не стоит пугаться DLL в проекте. В "винде" DLLы можно класть в один каталог с экзэшкой проги (каталог поиска библиотек по умолчанию)...

Сталкивался с ситуацией(использовал динамическую загрузку dll) когда dll есть в папке с программой и такая же библиотека, но другой версии, есть в папке Windows(видимо установлена и прописана в реестре другой программой), долго не мог понять какого ... функции из библиотеки выполняют не то что надо а часть вообще выдает мало понятные ошибки. С тех пор при использовании функции LoadLibrary указываю полный путь к dll файлу, конструкцией типа ExtractFilePath(Application.ExeName)+'lib.dll'.
Если будет 2 равнозначных варианта, с использованием библиотеки или без, я бы предпочёл тот что без библиотеки, хотя это не принципиально. В моем случае дело видимо идет к использованию libsagui-2.dll или libmicrohttpd-10.dll, хотя может еще какие варианты появятся.
tsknv
новенький
 
Сообщения: 14
Зарегистрирован: 25.09.2015 08:09:26

Re: Посоветуйте embedded WEB-сервер для GUI-приложенией

Сообщение debi12345 » 16.01.2020 13:20:22

Если будет 2 равнозначных варианта, с использованием библиотеки или без, я бы предпочёл тот что без библиотеки

Можно попробовать залинковать в экзешник статически.
Статическую версию для виндов компилитcя M$ в ихней CVS кооперации с опенсорсом (VCPKG) :

Код: Выделить всё
git clone git://github.com/microsoft/vcpkg.git
cd vcpkg
vcpkg install libmicrohttpd:x64-windows-static
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36

Рейтинг@Mail.ru