Посоветуйте embedded WEB-сервер для GUI-приложенией
Модератор: Модераторы
Посоветуйте embedded WEB-сервер для GUI-приложенией
Добрый день!
Посоветуйте, пожалуйста, новичку в Lazarus, на который я хочу перейти на всегда, в перспективе. Для встраивания WEB-сервера в свои приложения на Delphi я использовал Intraweb, тем более, что его раздавали бесплатно.
Требования в общем такие - несколько десятков, до сотни одновременных клиентов (не тысячи). Внятный путь "обучения"сервера понимать GET-запросы с параметрами. Далее еще будет работа клиентов с базой данных, возможно, это уже важно, и на этом этапе. Придется или динамически создавать/уничтожать соединения (в принципе, время обработки запроса в пару секунд не критично) или держать пул соединений...
Сервер нужно встраивать в приложения с графическим интерфейсом.
Смотрел на Lazarus fpWeb, и попробовал немного - работает, но, к стыду своему, пока не понял как его прикрутить к обычной форме. Что такое fcl-web? Какой путь создания более-или менее адекватного, встраиваемого сервера вообще посоветуете?
Посоветуйте, пожалуйста, новичку в Lazarus, на который я хочу перейти на всегда, в перспективе. Для встраивания WEB-сервера в свои приложения на Delphi я использовал Intraweb, тем более, что его раздавали бесплатно.
Требования в общем такие - несколько десятков, до сотни одновременных клиентов (не тысячи). Внятный путь "обучения"сервера понимать GET-запросы с параметрами. Далее еще будет работа клиентов с базой данных, возможно, это уже важно, и на этом этапе. Придется или динамически создавать/уничтожать соединения (в принципе, время обработки запроса в пару секунд не критично) или держать пул соединений...
Сервер нужно встраивать в приложения с графическим интерфейсом.
Смотрел на Lazarus fpWeb, и попробовал немного - работает, но, к стыду своему, пока не понял как его прикрутить к обычной форме. Что такое fcl-web? Какой путь создания более-или менее адекватного, встраиваемого сервера вообще посоветуете?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
<<но, к стыду своему, пока не понял как его прикрутить к обычной форме>> Что значит прикрутить к обычной форме? Просто встроить в веб-сервер в GUI приложение?
Я к примеру, использую BrookFramework, но fpWeb тоже должен работать
Я к примеру, использую BrookFramework, но fpWeb тоже должен работать
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
fpCEF3 - это если нужен действительно надежный встроенный в приложение браузер. Главный недостаток - куча громоздких длл.
ЗЫ
Позор мне! Не доглядел, что нужен сервер, а не браузер.
ЗЫ
Позор мне! Не доглядел, что нужен сервер, а не браузер.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Снег Север писал(а):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
Огромное спасибо всем, кто отвечает.
Как вариант, может стоит вообще смотреть в строну Indy? Вероятно, и там можно расширить компонент сервера для понимания get-запросов и прочего…
Вот только с пулами там видимо нет ничего. Создавать коненекты для каждого запроса? Топорно, но вероятно надежно. В конкретной задаче пара секунд на запрос не проблема.
Как вариант, может стоит вообще смотреть в строну Indy? Вероятно, и там можно расширить компонент сервера для понимания get-запросов и прочего…
Вот только с пулами там видимо нет ничего. Создавать коненекты для каждого запроса? Топорно, но вероятно надежно. В конкретной задаче пара секунд на запрос не проблема.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Aleks69 писал(а):может стоит вообще смотреть в строну Indy
Лично не советую. Я с ним нахлебался. Правда со стороны клиента использовал. И непонятно для чего Вам Инди-то? Чем нативный компонент или указанные фреймворки не подойдут? С пулами работают эти либы
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
- установить M$ Visual C++ 20xx с EnglishLangPack-ом
... ждать
Линковать статически собранную либу с FPC через С-интерфейс.
Байндиги к этой либе для FPC:
https://github.com/graemeg/freepascal/t ... microhttpd
Пример на FPC:
https://fossies.org/linux/fpcbuild/fpcs ... _thread.pp
Код: Выделить всё
- 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
> Чем нативный компонент
Спасибо, установил brookframework и смотрю на TBrookHTTPServer.
Намекните, пожалуйста, в каком направлении смотреть в сторону многопользовательской работы с базой MySQL на вставку записей.
Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
Хватит ли стандартного соединения (динамически создаваемых соединений) MySQL 5.7 из SQLDb Lazarus или лучше смотреть что-то типа Zeoz и т.п.?
Спасибо, установил brookframework и смотрю на TBrookHTTPServer.
Намекните, пожалуйста, в каком направлении смотреть в сторону многопользовательской работы с базой MySQL на вставку записей.
Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
Хватит ли стандартного соединения (динамически создаваемых соединений) MySQL 5.7 из SQLDb Lazarus или лучше смотреть что-то типа Zeoz и т.п.?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
С базой данной мало что подскажу, собственно, это можно отдельный топик создать. А вообще я как правило юзаю в веб-серверах SQLite3 или MySQL через небольшой ОРМ плагин в составе брук - dOPF https://github.com/risoflora/brookfreep ... ugins/dopf
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Мы на работе похожую задачу решили в лоб :Записи потребуется вставлять от клиентов (сервисные программы) которые будут дергать сервер get-запросами ( клиентский WEB интерфейс пока не нужен, но потом потребуется, поэтому хочу сразу иметь в приложении сервер)
1) http-обработку (сыпятся JSON RPC от клиентов), фильтрацию адресов, авторизацию и т.д. доверили обычному апачу
2) прогу типа Вашей слепили в виде CGI-хэндлера к апачу - она тупо обрабатывает в своем STDIN тот JSON, что получает от сервера
3) с базами данных общается прога-сервис - он программируется и получает данные от проги "2)" через CORBA (так проще всего)
4) сервис "3)" держит пулы соединений (это необходимо - так как у ORACLE крайне медленный единичный коннект,с этой же целью все БД-запросы - пареметрические), а мультиюзерность обеспечивается тем, что все функции обработки (при желании можно запускать в отдельных трэдах) изолированы друг от друга (переменные определены как локальные внутри функций, во время записи в БД делаются лочки таблиц, каждый клиентский запрос обрабатывается в отдельном БД-соединении..)
Мы на работе похожую задачу решили в лоб :
Интересно, спасибо. Благодарю Вас!
Архитектурно в целом понятно, но пока для меня сложновато. Тут дело еще в том, что хочется сделать standalone-приложение, максимально простое в использовании и развертывании.
В Intraweb я бы попробовал решить эту задачу так: в (на) usersessionunit (по сути контейнер типа DataModule) поместил ADOConnection и ADOQuery и потом обращался бы к ним через usersession.ado..... а при уничтожении сессии удалял бы объекты доступа к данным. Вероятно, все бы и заработало. Если бы, конечно, не произошло multitread-облома в цепочке OLEDBForODBC -> ODBC драйвер для MySQL (нативного OLE DB провайдера для MySQL не существует, но на крайний случай можно было бы уйти, например, на MSSQL).
А вот как быть в Lazarus пока не представляю. Предположим, у меня есть сервер - TBrookHTTPServer. А вот что можно рассматривать аналогом usersession? Откуда собственно и работать с базой... и через что. SQLDB, Zeos..
Хм интересный подход ... Если я правильно понял сервер в приложении нужен просто для обмена данными ? Но зачем тогда нужен именно Web-сервер ? Существует масса более простых способов организовать обмен данными между приложениями.
Зы
Если в будущем у приложения будет веб интерфейс по опыту нужно сразу начинать именно с него .
Зы Зы
Что-то по хожее на ваш проект я писал в прошлом году : гибрид сервера и браузера задуманный как среда для контролируемого запуска веб приложений


Web-сервер правда довольно примитивный на основе этого кода https://sites.google.com/site/timpascal ... rver/uhttp но если нужна именно простота то проще придумать достаточно сложно ( описание тут )
Насчет возможности обработки запросов от большого количества пользователей одновременно есть некоторые сомнения, но в принципе все работает .
Зы
Если в будущем у приложения будет веб интерфейс по опыту нужно сразу начинать именно с него .
Зы Зы
Что-то по хожее на ваш проект я писал в прошлом году : гибрид сервера и браузера задуманный как среда для контролируемого запуска веб приложений


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
- Откуда: Ташкент (Узбекистан)
Нормальный БД-мультиюзер без 1) отдельного БД-соединения для каждого запроса и 2) пула соединений для ускорения подхода "1)" до уровня "почти не хуже, чем один постоянный коннект" почти нереален.а при уничтожении сессии удалял бы объекты доступа к данным. Вероятно, все бы и заработало. Если бы, конечно, не произошло multitread-облома в цепочке OLEDBForODBC -> ODBC драйвер для MySQL
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Aleks69
А зачем такие сложности вообще? Чем нормальная двухзвенка не устраивает? Зачем сюда http/web притягивать? Всё эелементарно решается в рамках технологии клиентсвер с обычным SQL сервером.
А для доступа к SQL не надо городить костыли в виде ADO/ODBC. Только нативные библиотеки. Как бонус - всё будет кросплатформено.
А зачем такие сложности вообще? Чем нормальная двухзвенка не устраивает? Зачем сюда http/web притягивать? Всё эелементарно решается в рамках технологии клиентсвер с обычным SQL сервером.
А для доступа к SQL не надо городить костыли в виде ADO/ODBC. Только нативные библиотеки. Как бонус - всё будет кросплатформено.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Вам в 1-ю очередь нужен "скелет" сервиса + пул соединений. Иначе намучаетесь мама не горюй.Предположим, у меня есть сервер - TBrookHTTPServer. А вот что можно рассматривать аналогом usersession? Откуда собственно и работать с базой... и через что. SQLDB, Zeos..
Добавлено спустя 6 минут 28 секунд:
Всё эелементарно решается в рамках технологии клиентсвер с обычным SQL сервером.
Возможно нужно адаптировать имеющиеся (типа CURL - из консоли или PHP) клиенты.
