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

Delphi. ARC. Основные моменты

Читаю книгу Delphi Memory Management, делаю небольшой конспект основных моментов. Учился под музыку Emy Care Read my Mind

Automatic Reference Counting – система, в которой использование каждого объекта отслеживается по ссылкам на него. Что это дает? Простоту кодирования. Например, мы можем писать так…

Вместо традиционного…

Но когда же уничтожается объект? В момент, когда число ссылок на него станет равным нулю.


Золотое правило ARC Continue reading

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

Delphi. SmartPointers – меньше кода больше дела

Читая Delphi Memory Management, открыл для себя SmartPointers. Подход, основанный на ARC, позволяет, применяя данный класс писать меньше кода, заниматься больше делом, сосредоточиться на бизнес-задаче.

Теперь можно писать так…

Вместо… Continue reading

Posted in Delphi | Leave a comment

Delphi. Memory Management. Book

Купил сегодня книгу по управлению памятью в Delphi. Понравилось содержание, хочу углубить свои знания в этом вопросе.

А вот и содержание на английском… Continue reading

Posted in Delphi | Leave a comment

Delphi. GarbageCollector

Понравилось, на одном из форумов, а ля сборщик мусора, теоретически должно сократиться количество кода… Но надо потестить….

Пример использования

В любом месте проекта делаем что-то подобное…

Врубил

При закрытии приложения – тишина, и это радует. Прошелся отладчиком, посмотрел, что да, заходим в Collect и все уничтожается как надо…

Ну, и если у нас несколько потоков обращаются к одному и тому же объекту, можно добавить критические секции… Но это, просто мысль вслух…

Posted in Delphi | Leave a comment