Индустрия программирования

Взаимодействие серверного и клиентского приложений



Задачами серверного приложения являются:
  1. получение от клиентского приложения текста SQL запроса,
  2. исполнение указанного SQL запроса,
  3. передача полученных данных из результирующего множества клиентскому приложению по его
    запросам,
  4. контроль и обработка возникающих ошибок.

Для решения этих задач и поддержания архитектуры клиент-сервер в разработанной системе
применена следующая схема взаимодействия клиентского и серверного приложений:
  1. Серверное приложение при начале своей работы инициализирует переменные окружения
    и создает соединение с ODBC драйвером.
  2. Запускаемое WWW сервером клиентское приложение регистрирует сервис в библиотеке
    DDEML и посылает запрос на создание канала с сервером. Серверное приложение в ответ на


    запрос о создании канала проверяет наличие свободной строки в таблице регистрации клиента. В
    случае наличия свободной строки серверное разрешает создание канала и помечает строку в
    таблице регистрации как занятую, указывая в графе статуса клиентского приложения признак
    создания канала.
  3. Клиентское посылает серверному приложению готовый текст SQL запроса, подготовленного
    на основе данных, введенных удаленным пользователем. Серверное приложение при появлении
    транзакции передачи данных клиентом записывает в любую строку со статусом клиентского
    приложения "создан канал" в таблице регистрации клиентских приложений идентификатор
    используемого для передачи данных канала и сам получаемых текст SQL запроса. Статус
    клиентского приложения изменяется на "передан текст SQL запроса".
  4. Клиентское приложение, получив транзакцию об окончании передачи данных серверному
    приложению, посылает серверному приложению запрос на асинхронную передачу данных
    клиентскому приложению. Серверное приложение, получив запрос клиентского приложение,
    производит поиск в таблице регистрации идентификатора канала, использованного клиентским
    приложением для пересылки запроса. Найдя нужную строку серверное приложение меняет статус
    клиентского приложения в этой строке на "первая группа данных получена", извлекает ранее

    переданный этим клиентским приложением текст SQL запроса, подготавливает SQL запрос и
    исполняет его. Идентификатор подготовленного запроса серверное приложение записывает в
    таблицу регистрации в соответствующую клиентскому приложению строку. После получение
    первых результатов SQL запроса серверное приложение сравнивает количество строк в
    результирующем множестве с оговоренным максимальным количеством одновременно
    передаваемых клиентскому приложению записей и формирует один из следующих признаков:
    записей в результирующем множестве не более максимального передаваемого числа; записей в
    результирующем множестве больше максимального передаваемого числа; записи,
    удовлетворяющие переданным в запросе критериям, отсутствуют; в процессе получения данных
    возникла ошибка. Сформированный признак вместе с полученными данными передается
    клиентскому приложению. Если не был сформирован признак о наличии дополнительных данных,
    то строка таблицы регистрации занимаемая клиентским приложением освобождается и в графу
    статуса помещается признак "свободна".
  5. Клиентское приложение, получив транзакцию об окончании асинхронного запроса к
    серверному приложению, анализирует переданный серверным приложением признак. Если,
    согласно признаку, получены еще не все данные, то клиентское приложение посылает повторный
    запрос на передачу данных серверному приложению. Серверное приложение, получив транзакцию,
    производит идентификацию клиентского приложения по идентификатору канала. Если, согласно
    статусу клиентского приложения, оно ожидает дополнительные данные, то серверное приложение
    извлекает из таблицы регистрации идентификатор SQL запроса и продолжает получение
    результатов этого, ранее выполненного запроса. Далее взаимодействие серверного и клиентского
    приложений происходит как и в пункте 4. Пункт 5 повторяется до момента передачи всего
    полученного результирующего множества от серверного к клиентскому приложению. По
    завершению этой передачи строка таблицы регистрации занимаемая клиентским приложением
    освобождается и в графу статуса помещается признак "свободна".
  6. Клиентское приложение закрывает канал и деинициализирует себя в библиотеке
    DDEML.


Содержание раздела