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

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

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

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

Сообщение Aleks69 » 02.07.2019 20:43:48

Добрый день!

Посоветуйте, пожалуйста, новичку в Lazarus, на который я хочу перейти на всегда, в перспективе. Для встраивания WEB-сервера в свои приложения на Delphi я использовал Intraweb, тем более, что его раздавали бесплатно.

Требования в общем такие - несколько десятков, до сотни одновременных клиентов (не тысячи). Внятный путь "обучения"сервера понимать GET-запросы с параметрами. Далее еще будет работа клиентов с базой данных, возможно, это уже важно, и на этом этапе. Придется или динамически создавать/уничтожать соединения (в принципе, время обработки запроса в пару секунд не критично) или держать пул соединений...

Сервер нужно встраивать в приложения с графическим интерфейсом.

Смотрел на Lazarus fpWeb, и попробовал немного - работает, но, к стыду своему, пока не понял как его прикрутить к обычной форме. Что такое fcl-web? Какой путь создания более-или менее адекватного, встраиваемого сервера вообще посоветуете?
Aleks69
новенький
 
Сообщения: 20
Зарегистрирован: 29.03.2009 14:25:01

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

Сообщение Ichthyander » 03.07.2019 00:19:21

<<но, к стыду своему, пока не понял как его прикрутить к обычной форме>> Что значит прикрутить к обычной форме? Просто встроить в веб-сервер в GUI приложение?
Я к примеру, использую BrookFramework, но fpWeb тоже должен работать
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 496
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

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

Сообщение Снег Север » 03.07.2019 08:32:31

fpCEF3 - это если нужен действительно надежный встроенный в приложение браузер. Главный недостаток - куча громоздких длл.


ЗЫ
Позор мне! Не доглядел, что нужен сервер, а не браузер.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2103
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение Ichthyander » 03.07.2019 12:02:58

Снег Север писал(а):fpCEF3

Я думаю он совсем не то имел ввиду

Добавлено спустя 5 минут 17 секунд:
А, только что иправились... Совпадение? )
Aleks69 писал(а):Что такое fcl-web?

Набор компонентов для построения своих веб-пиложений.
По поводу brookframework - он разделился на две ветки. https://github.com/risoflora/brookfreepascal - поддерживает только FreePascal - по сути является надстройкой над fcl-web.
https://github.com/risoflora/brookframework - универсальный для Delphi/FreePascal. Пробовал оба варианта. Последний в плане регулировки работы с сетью имеет больше возможностей. Первый имеет больше плагинов. Все три поддерживают регулировки многопоточности в обработке запросов. Последний еще несколько режимов, типа пул запросов и т.д. Вообщем, пробуйте. Есть и другие фреймворки.

Добавлено спустя 1 час 53 минуты 30 секунд:
Да, еще есть продвинутая ОРМ mORMot - сам не юзал, но кто пользуется хвалит. Там встроенные средства по работе клиент-сервер по HTTP
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 496
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

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

Сообщение Aleks69 » 03.07.2019 19:38:52

Огромное спасибо всем, кто отвечает.


Как вариант, может стоит вообще смотреть в строну Indy? Вероятно, и там можно расширить компонент сервера для понимания get-запросов и прочего…
Вот только с пулами там видимо нет ничего. Создавать коненекты для каждого запроса? Топорно, но вероятно надежно. В конкретной задаче пара секунд на запрос не проблема.
Aleks69
новенький
 
Сообщения: 20
Зарегистрирован: 29.03.2009 14:25:01

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

Сообщение Ichthyander » 03.07.2019 23:21:31

Aleks69 писал(а):может стоит вообще смотреть в строну Indy

Лично не советую. Я с ним нахлебался. Правда со стороны клиента использовал. И непонятно для чего Вам Инди-то? Чем нативный компонент или указанные фреймворки не подойдут? С пулами работают эти либы
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 496
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

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

Сообщение debi12345 » 03.07.2019 23:53:38

- установить M$ Visual C++ 20xx с EnglishLangPack-ом
Код: Выделить всё
- git pull git://github.com/microsoft/vcpkg.git
  #cd vcpkg
  #bootstrap-vcpkg.bat
  #vcpkg search httpd    -> libmicrohttpd
  #vcpkg install libmicrohttpd:(x86|x64)-windows-static

... ждать
Линковать статически собранную либу с FPC через С-интерфейс.

Байндиги к этой либе для FPC:
https://github.com/graemeg/freepascal/t ... microhttpd

Пример на FPC:
https://fossies.org/linux/fpcbuild/fpcs ... _thread.pp
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5278
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение Aleks69 » 04.07.2019 02:15:22

> Чем нативный компонент

Спасибо, установил brookframework и смотрю на TBrookHTTPServer.
Намекните, пожалуйста, в каком направлении смотреть в сторону многопользовательской работы с базой MySQL на вставку записей.
Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
Хватит ли стандартного соединения (динамически создаваемых соединений) MySQL 5.7 из SQLDb Lazarus или лучше смотреть что-то типа Zeoz и т.п.?
Aleks69
новенький
 
Сообщения: 20
Зарегистрирован: 29.03.2009 14:25:01

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

Сообщение Ichthyander » 04.07.2019 08:01:35

С базой данной мало что подскажу, собственно, это можно отдельный топик создать. А вообще я как правило юзаю в веб-серверах SQLite3 или MySQL через небольшой ОРМ плагин в составе брук - dOPF https://github.com/risoflora/brookfreep ... ugins/dopf
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 496
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

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

Сообщение debi12345 » 04.07.2019 08:30:35

Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
Мы на работе похожую задачу решили в лоб :
1) http-обработку (сыпятся JSON RPC от клиентов), фильтрацию адресов, авторизацию и т.д. доверили обычному апачу
2) прогу типа Вашей слепили в виде CGI-хэндлера к апачу - она тупо обрабатывает в своем STDIN тот JSON, что получает от сервера
3) с базами данных общается прога-сервис - он программируется и получает данные от проги "2)" через CORBA (так проще всего)
4) сервис "3)" держит пулы соединений (это необходимо - так как у ORACLE крайне медленный единичный коннект,с этой же целью все БД-запросы - пареметрические), а мультиюзерность обеспечивается тем, что все функции обработки (при желании можно запускать в отдельных трэдах) изолированы друг от друга (переменные определены как локальные внутри функций, во время записи в БД делаются лочки таблиц, каждый клиентский запрос обрабатывается в отдельном БД-соединении..)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5278
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение Aleks69 » 04.07.2019 11:38:16

Мы на работе похожую задачу решили в лоб :

Интересно, спасибо. Благодарю Вас!
Архитектурно в целом понятно, но пока для меня сложновато. Тут дело еще в том, что хочется сделать standalone-приложение, максимально простое в использовании и развертывании.
В Intraweb я бы попробовал решить эту задачу так: в (на) usersessionunit (по сути контейнер типа DataModule) поместил ADOConnection и ADOQuery и потом обращался бы к ним через usersession.ado..... а при уничтожении сессии удалял бы объекты доступа к данным. Вероятно, все бы и заработало. Если бы, конечно, не произошло multitread-облома в цепочке OLEDBForODBC -> ODBC драйвер для MySQL (нативного OLE DB провайдера для MySQL не существует, но на крайний случай можно было бы уйти, например, на MSSQL).

А вот как быть в Lazarus пока не представляю. Предположим, у меня есть сервер - TBrookHTTPServer. А вот что можно рассматривать аналогом usersession? Откуда собственно и работать с базой... и через что. SQLDB, Zeos..
Aleks69
новенький
 
Сообщения: 20
Зарегистрирован: 29.03.2009 14:25:01

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

Сообщение Alex2013 » 04.07.2019 11:45:35

Хм интересный подход ... Если я правильно понял сервер в приложении нужен просто для обмена данными ? Но зачем тогда нужен именно Web-сервер ? Существует масса более простых способов организовать обмен данными между приложениями.
Зы
Если в будущем у приложения будет веб интерфейс по опыту нужно сразу начинать именно с него .
Зы Зы

Что-то по хожее на ваш проект я писал в прошлом году : гибрид сервера и браузера задуманный как среда для контролируемого запуска веб приложений
ИзображениеИзображение

Web-сервер правда довольно примитивный на основе этого кода https://sites.google.com/site/timpascal ... rver/uhttp но если нужна именно простота то проще придумать достаточно сложно ( описание тут )
Насчет возможности обработки запросов от большого количества пользователей одновременно есть некоторые сомнения, но в принципе все работает .
Последний раз редактировалось Alex2013 05.07.2019 16:06:43, всего редактировалось 5 раз(а).
Alex2013
энтузиаст
 
Сообщения: 1469
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение debi12345 » 04.07.2019 12:09:17

а при уничтожении сессии удалял бы объекты доступа к данным. Вероятно, все бы и заработало. Если бы, конечно, не произошло multitread-облома в цепочке OLEDBForODBC -> ODBC драйвер для MySQL
Нормальный БД-мультиюзер без 1) отдельного БД-соединения для каждого запроса и 2) пула соединений для ускорения подхода "1)" до уровня "почти не хуже, чем один постоянный коннект" почти нереален.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5278
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение alexs » 04.07.2019 12:13:30

Aleks69
А зачем такие сложности вообще? Чем нормальная двухзвенка не устраивает? Зачем сюда http/web притягивать? Всё эелементарно решается в рамках технологии клиентсвер с обычным SQL сервером.
А для доступа к SQL не надо городить костыли в виде ADO/ODBC. Только нативные библиотеки. Как бонус - всё будет кросплатформено.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3835
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение debi12345 » 04.07.2019 12:15:08

Предположим, у меня есть сервер - TBrookHTTPServer. А вот что можно рассматривать аналогом usersession? Откуда собственно и работать с базой... и через что. SQLDB, Zeos..
Вам в 1-ю очередь нужен "скелет" сервиса + пул соединений. Иначе намучаетесь мама не горюй.

Добавлено спустя 6 минут 28 секунд:
Всё эелементарно решается в рамках технологии клиентсвер с обычным SQL сервером.

Возможно нужно адаптировать имеющиеся (типа CURL - из консоли или PHP) клиенты.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5278
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru