IP-драйвер: мнение #2

Автор: Сергей Редькин

Хотелось поделиться своими впечатлениями по работе драйвера. Поскольку проекты реально работают у клиентов и возимся мы с ним довольно долго и плотно, то есть и подводные камни, на которые мы наткнулись. Темплеты ABC, но не стандартные, а доработанные и перекочевавшие из CW4. Темплеты и классы адаптируются за 1 час…

При работе по 100 мбит сети никаких существенных замедлений не замечено. При многопользовательской работе получаем выигрыш на порядок, т.к. на TPS-файлах при работе с двух станций есть замедление в 10-20 раз. Работа через инет по ADSL тоже довольно шустрая. Через GPRS или 3G смотрится очень тоскливо. Броузник (одна страница) открывается 1-2мин. Но это понятно ping 0.5-1сек для GPRS и 0.25-0.4 для 3G. Но работать при необходимости все равно можно.
Несомненное преимущество, что с одну APP можно использовать, как для TPS, так и для IP. Для этого в глобальных настройках следует включить (отключить один флажок), а в рукописном коде использовать условную компиляцию. В простейшем случае она не нужна, т.к. код одинаковый. В дальнейшем при оптимизации часть кода перебирается в хранимые процедуры на сервере.

Если в списках используются функции фильтрации, то их надо продублировать на сервере. Единственная неприятность, что надо использовать не классы, а операторы языка для работы с файлами. Одна серверная DLL может работать с разными наборами данных. Для этого достаточно написать хранимку, в которой указывается путь к данным. При этом возможно запретить выход за пределы каталога.

Что касается глюков и не оптимальной работы.

1. В доке продекларировано, что хранимка возвращает строку. На самом деле возвращается CSTRING. Например, невозможно возвратить группу, в которой используется LONG. Обходится путем преобразования LONG в STRING.

2. Для VIEW не работает PROP:IPRequestCount (позволяет передать группу записей за раз). Как обойти и почему не работает пока не исследовали — просто не используем.

3. Не работает RECORDS(File), RECORDS(Key). Вернее работает один раз после открытия или после SET — NEXT. Выход — хранимка на сервере или SET — NEXT.

4. При чтении VIEW реально тянутся все Record, участвующие во VIEW, а не описанные поля. Запись не сжатая, поэтому траффик повышается.

5. В драйвере DOS тоже аналогичный глюк — GET(File,Pointer,Len) с сервера реально тянут количество байт рекорда. Поскольку драйвер используется при пересылке файлов и буфер в оригинальных классах длиной 64К, то класс пересылки следует доработать, учитывая эту особенность.

Сергей Редькин
SPR AT_NO_SPAM enigmasoft.com.ua
ЧП «Энигма Софт»