Delphi.RobustServer.Обработка ошибок, интерфейсный класс TResponses и измерение оперативной памяти

Сделал обработку ошибок следующим образом

В модуле CommandGet сделал единый блок try / except

Теперь, если возникнет ошибка при обработке запроса, она не потеряется, а придет в понятном json формате, то есть вот так….

Кстати, здесь же можно посмотреть, что в статус баре появилось измерение оперативной памяти.

Возможно информация избыточная, над этим надо подумать, но в целом мне нравится.  Continue reading

Posted in Delphi | Leave a comment

Delphi. Измерение оперативной памяти

Модуль из проекта

Вот эти 2 процедуры измеряют текущую память и пиковую

Полный модуль

 

Posted in Delphi | Leave a comment

Delphi.RobustServer – первые шаги

Github

Первые несколько шагов. Текущую версию я делаю Visual Components Library App. Потом можно будет перевернуть это приложение в сервис, при желании.

Архитектура  следующая Continue reading

Posted in Delphi | Leave a comment

Delphi. Отправка строки из одного потока в другой

Простой пример, отправка из дополнительного потока в основной

Отправка…

Прием

Continue reading

Posted in Без рубрики | Leave a comment

Delphi. RobustServer. Пишем мощный и надежный сервер на Indy

На мой взгляд, более менее универсальная архитектура приложения выглядит так…

В этом и последующем постах будем писать мощный и надежный сервер. Это будет шаблон для будущих проектов. Стэк технологий у нас будет следующий

  • Delphi Seattle
  • MySQL
  • FireDAC
  • SuperObject

Ближайшие задачи

  • Создать архитектуру модулей, подключить к SVN или GIT, скорее всего второе, в public режиме
  • Авторизация запроса
  • Авторизация пользователя: одно и двухуровневая ( авторизацию через номер телефона можно сделать абстрактно, через интерфейс)
  • Система логгирования (скорее всего LDS Logger)
  • Пример буфера для высоконагруженных запросов
  • Тестер нагрузки для сервера
  • Загрузка файлов на сервер (возможно с интерфейсом проверки на вирусы)
  • Клиента для теста API (Веб и Windows)
  • Перевести запросы на HTTPs
  • Научиться переводить приложение из EXE в сервис Windows…

Остальные задачи для шаблона напишем по ходу дела…

Posted in Delphi | Leave a comment

Delphi. Потоки по книге Мартина Харви. Конспект

Запуск потока

Примеры анонимных запусков

Традиционный запуск

Полный модуль традиционного запуска из Main

С объявлением класса потока, например так…


Флаг Terminated для потока

Досрочная остановка потока
В некоторых ситуациях одному потоку может потребоваться уведомить
другой поток о своем завершении. Это обычно происходит, когда поток
выполняет длительную операцию, и пользователь решает выйти из
приложения, или операция должна быть прервана. TThread обеспечивает
простой механизм для поддержки таких действий, а именно, метод
Terminate и свойство Terminated. Когда поток создается, свойство
Terminated установлено в False, а всякий раз, когда вызывается метод
Terminate, свойство Terminated для этого потока устанавливается в True.
Таким образом, на всех потоках лежит ответственность за периодическую
проверку, не были ли они остановлены, и если это случается, за
корректное завершение своей работы. Заметьте, что никакой
крупномасштабной синхронизации при этом не происходит: когда один
поток устанавливает свойство Terminated другого, нельзя предполагать,
что другой поток тут же прочитает значение своего свойства Terminated и
начнет процесс завершения. Свойство Terminated является просто флагом,
говорящим “пожалуйста, завершайся как можно скорее”.

Continue reading

Posted in Без рубрики | Leave a comment

Delphi. Запуск анонимного потока

Увидел в блоге следующий пример, по-моему оч. удобно для каких-то простых случаев….

Немного модифицировал

Со StackOverflow, в тему, запуск анонимного потока процедуры с параметрами

 

Posted in Delphi | Leave a comment

Delphi. Поиск имени свойства в объектном инспекторе

В Seattle привык пользоваться фильтром по свойствам, но в XE4, например такого фильтра нет. Как быть? Открыл для себя

“Тык на любом свойстве в объектном инспекторе”

“Жмем Tab”

“Начинаем печатать имя свойства, например Name”

При этом, если свойство находится в другом свойстве, то оно не найдется.

Более подробно на сайте Эмбы )

 

Posted in Без рубрики | Leave a comment

Delphi – методы уничтожения объекта

Небольшая заметка по книге Delphi Memory Management. 

Ниже перечислены методы освобождения объектов при ручном управлении памятью. Continue reading

Posted in Без рубрики | Leave a comment

Delphi. “Nullable” Post by Allen Bauer

В Delphi вроде как нет Nullable типов, но если нет, но очень хочется, то они могут появиться ))) Читал книгу Delphi Memory Management, и там наткнулся на раздел про Nullable, автор книги ссылался на MVP Allen Bauer.

Идея проста…

To implement a nullable type, we need to create a wrapper around a value type and add an
undefined flag. That part can be easily achieved with a generic record storing our wrapped
Value and HasValue flag.

А вот и первоисточник…

Класс Nullable Continue reading

Posted in Delphi | Leave a comment