Фоновое выполнение алгоритмов на сервере
Выполнение алгоритмов на сервере может осуществляться в фоновом режиме, такой режим работы довольно специфичен. Фоновая работа сервера обеспечивается асинхронным выполнением алгоритмов, которое означает, что клиентское приложение не ожидает завершения асинхронного выполнения алгоритма и продолжает свою работу. Фоновый режим работы используется, когда работа клиента не зависит от возвращаемого сервером значения.
Во время того, как на сервер посылается запрос на выполнение некоторого алгоритма, происходит создание дополнительного сетевого соединения, в рамках которого и будет происходить выполнение алгоритма. То есть в администраторе сервера можно увидеть два соединения. После того, как выполнение алгоритма на сервере закончено, сетевое соединение автоматически прекращается. В случае если клиент, который инициировал асинхронное выполнение алгоритма на сервере, разорвет свое соединение с ним, то дополнительно созданное соединение с сервером будет существовать до полного выполнения алгоритма.
В таком режиме работы сервер обращается сам к себе в качестве клиента, поэтому для работы серверу необходимы файл инициализации клиентского приложения. При создании дополнительного соединения не происходит процесса поиска серверов при помощи локатора. Параметры для вложенного соединения берутся из памяти, а не считываются из файлов. Для обеспечения безопасности соединения используются сертификаты, которые уже имеются на сервере. Несмотря на то что сервер сам для себя является клиентом, клиентские сертификаты безопасности ему не нужны.
Асинхронное выполнение алгоритма на сервере осуществляется при помощи функции ВЫПОЛНИТЬ_СЕРВ. За асинхронное выполнение отвечает параметр функции режим_запуска со значением НЕТ, который означает, что клиент не ждет ответа от сервера и продолжает свою работу. Также асинхронное выполнение алгоритма на сервере может осуществлять функция ВЫПОЛНИТЬ, вызов которой происходит на сервере.
Запуск алгоритма для выполнения на сервере может осуществляться как с клиента, так и с сервера.
Далее в примерах для демонстрации того, что клиентское приложение продолжает свою работу и не ждет завершения выполнения алгоритма на сервере, в серверном алгоритме специально сделана задержка на 1 минуту, после которой происходит формирование результата выполнения алгоритма.
При создании алгоритмов для выполнения на сервере следует использовать шаблон проекта "Расчет на сервере", обеспечивающий подключение всех необходимых модулей.
Пример 1
Клиентом осуществляется вызов асинхронного выполнения алгоритма пауза.ibx на сервере. Параметр рез будет возвращаться со значением НЕТ за счет асинхронного выполнения алгоритма.ВЫЧИСЛИТЬ ПЕРЕМ ЛОГИКА: рез ВЫПОЛНИТЬ_СЕРВ({"пауза.ibx"} (ПЕРЕМ рез), НЕТ) СООБЩЕНИЕ(СТР(рез)) КОНЕЦ
пауза.ibx
ВЫЧИСЛИТЬ(ПЕРЕМ ЛОГИКА: рез) ПАУЗА(60000) рез = ДА КОНЕЦ
Пример 2
Клиентом осуществляется вызов алгоритма на сервере пауза_старт.ibx, который в свою очередь вызывает асинхронное выполнение алгоритма пауза.ibx. Параметр рез будет возвращаться со значением НЕТ за счет асинхронного выполнения алгоритма. В данном примере алгоритм пауза.ibx запускается локально на сервере, поэтому название исполняемого файла заключено в квадратные скобки.ВЫЧИСЛИТЬ ПЕРЕМ ЛОГИКА: рез ВЫПОЛНИТЬ_СЕРВ({"пауза_старт.ibx"} (ПЕРЕМ рез), ДА) СООБЩЕНИЕ(СТР(рез)) КОНЕЦ
пауза_старт.ibx
ВЫЧИСЛИТЬ(ПЕРЕМ ЛОГИКА: рез) ВЫПОЛНИТЬ(["пауза.ibx"] (ПЕРЕМ рез), НЕТ) КОНЕЦ
пауза.ibx
ВЫЧИСЛИТЬ(ПЕРЕМ ЛОГИКА: рез) ПАУЗА(60000) рез = ДА КОНЕЦ