Delphi rest клиент / сервер (веб-брокер) + база данных + одновременные запросы клиентов - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в разработке REST и создаю простой API отдыха, чтобы запрашивать значения базы данных у клиентов.Я использовал ассистент проекта «Приложение веб-сервера Delphi» (тот, который использует TIdHTTPWebBrokerBridge и WebModule, где вы создаете различные «Действия»).Он работает нормально, и я могу делать запросы от клиентов.

Серверный WebModule содержит FDConnection и некоторые компоненты FDQuery для выполнения запросов к базе данных (MySQL), и каждое действие выполняет определенный запрос с конкретными полученными параметрамичерез параметры запроса.

Клиентское приложение использует компоненты TRESTResponse, TRESTRequest, TRESRResponse для отправки / получения данных.

Например:

  • запрос клиента на сервер некоторыезначения для конкретного пользователя, отправив "user = user1" и "passwd = ***" в качестве параметров запроса.
  • сервер выполняет запрос "select * from xxx, где user = user1 и passwd = ...…... "и отправляет ответ клиенту.

Каждый запрос" специфичен для пользователя ".

Хорошо, он работает, но теперь у меня есть некоторые опасения из-за моегоrest / webbroker, работающее невежествоМожет ли сервер ответить неверными данными, потому что курсор FDQuery находится в другой записи?Или веб-брокер создает запрос для каждого запроса без проблем?

Лучше ли создавать FDQuery во время выполнения для каждого запроса и уничтожать его после завершения запроса?

Я сделал простой тествчера запускал три экземпляра клиентского приложения и одновременно отправлял 300 запросов на сервер (по 100 от каждого клиента), и он работал, получая правильные данные, но я не знаю, является ли это достаточной гарантией.

Естьэто (Delphi Web Server Application) правильный способ создания сервера?Чем отличается DataSnap?

Любой совет?

1 Ответ

0 голосов
/ 27 февраля 2019

В архитектуре Datasnap (есть несколько разновидностей, но все они имеют общую архитектуру), «сервер» делает 1 копию ServerMethodsUnit для каждого клиентского соединения.Это с ServerClass.LifeCycle, установленным на Session.Следовательно, каждый клиент сможет выполнить метод сервера и получить результат, возвращаемый ему независимо от того, что может запрашивать любой другой клиент.

В вашем случае каждый ServerMethodsUnit будетиметь свои собственные FdConnection, FdQuery и т. д., независимо от того, размещаете ли вы компоненты времени разработки или создаете их экземпляры во время выполнения, последствия одинаковы.

Ограничение здесь будет оборудованием, которое Datasnap/ Приложение WebBroker запущено.(Пропускная способность сети, оперативная память, скорость жесткого диска и т. Д.)

Datasnap (REST, DBX, Standalone, ISAPI, Apache, Linux), на мой взгляд, является надежной основой для разработки клиент / сервер.

...