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

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

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

Aleks69
новенький
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

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

Сообщение Aleks69 »

Добрый день!

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

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

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

Смотрел на Lazarus fpWeb, и попробовал немного - работает, но, к стыду своему, пока не понял как его прикрутить к обычной форме. Что такое fcl-web? Какой путь создания более-или менее адекватного, встраиваемого сервера вообще посоветуете?
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

<<но, к стыду своему, пока не понял как его прикрутить к обычной форме>> Что значит прикрутить к обычной форме? Просто встроить в веб-сервер в GUI приложение?
Я к примеру, использую BrookFramework, но fpWeb тоже должен работать
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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


ЗЫ
Позор мне! Не доглядел, что нужен сервер, а не браузер.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Снег Север писал(а):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
Aleks69
новенький
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Сообщение Aleks69 »

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


Как вариант, может стоит вообще смотреть в строну Indy? Вероятно, и там можно расширить компонент сервера для понимания get-запросов и прочего…
Вот только с пулами там видимо нет ничего. Создавать коненекты для каждого запроса? Топорно, но вероятно надежно. В конкретной задаче пара секунд на запрос не проблема.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

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

Лично не советую. Я с ним нахлебался. Правда со стороны клиента использовал. И непонятно для чего Вам Инди-то? Чем нативный компонент или указанные фреймворки не подойдут? С пулами работают эти либы
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

- установить 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
Aleks69
новенький
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Сообщение Aleks69 »

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

Спасибо, установил brookframework и смотрю на TBrookHTTPServer.
Намекните, пожалуйста, в каком направлении смотреть в сторону многопользовательской работы с базой MySQL на вставку записей.
Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
Хватит ли стандартного соединения (динамически создаваемых соединений) MySQL 5.7 из SQLDb Lazarus или лучше смотреть что-то типа Zeoz и т.п.?
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

С базой данной мало что подскажу, собственно, это можно отдельный топик создать. А вообще я как правило юзаю в веб-серверах SQLite3 или MySQL через небольшой ОРМ плагин в составе брук - dOPF https://github.com/risoflora/brookfreep ... ugins/dopf
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
Мы на работе похожую задачу решили в лоб :
1) http-обработку (сыпятся JSON RPC от клиентов), фильтрацию адресов, авторизацию и т.д. доверили обычному апачу
2) прогу типа Вашей слепили в виде CGI-хэндлера к апачу - она тупо обрабатывает в своем STDIN тот JSON, что получает от сервера
3) с базами данных общается прога-сервис - он программируется и получает данные от проги "2)" через CORBA (так проще всего)
4) сервис "3)" держит пулы соединений (это необходимо - так как у ORACLE крайне медленный единичный коннект,с этой же целью все БД-запросы - пареметрические), а мультиюзерность обеспечивается тем, что все функции обработки (при желании можно запускать в отдельных трэдах) изолированы друг от друга (переменные определены как локальные внутри функций, во время записи в БД делаются лочки таблиц, каждый клиентский запрос обрабатывается в отдельном БД-соединении..)
Aleks69
новенький
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Сообщение Aleks69 »

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

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

А вот как быть в Lazarus пока не представляю. Предположим, у меня есть сервер - TBrookHTTPServer. А вот что можно рассматривать аналогом usersession? Откуда собственно и работать с базой... и через что. SQLDB, Zeos..
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

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

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

Web-сервер правда довольно примитивный на основе этого кода https://sites.google.com/site/timpascal ... rver/uhttp но если нужна именно простота то проще придумать достаточно сложно ( описание тут )
Насчет возможности обработки запросов от большого количества пользователей одновременно есть некоторые сомнения, но в принципе все работает .
Последний раз редактировалось Alex2013 05.07.2019 15:06:43, всего редактировалось 5 раз.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

а при уничтожении сессии удалял бы объекты доступа к данным. Вероятно, все бы и заработало. Если бы, конечно, не произошло multitread-облома в цепочке OLEDBForODBC -> ODBC драйвер для MySQL
Нормальный БД-мультиюзер без 1) отдельного БД-соединения для каждого запроса и 2) пула соединений для ускорения подхода "1)" до уровня "почти не хуже, чем один постоянный коннект" почти нереален.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Aleks69
А зачем такие сложности вообще? Чем нормальная двухзвенка не устраивает? Зачем сюда http/web притягивать? Всё эелементарно решается в рамках технологии клиентсвер с обычным SQL сервером.
А для доступа к SQL не надо городить костыли в виде ADO/ODBC. Только нативные библиотеки. Как бонус - всё будет кросплатформено.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

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

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

Возможно нужно адаптировать имеющиеся (типа CURL - из консоли или PHP) клиенты.
Ответить