Форум » LetoDB, HbNetio. » Leto DB Server(продолжение) » Ответить

Leto DB Server(продолжение)

alkresin: Только что открыл на Sourceforge новый проект - Leto DB Server - https://sourceforge.net/projects/letodb Это мультиплатформенный ( Windows, Unix/Linux ) сервер баз данных, предоставляющий клиентским программам доступ к dbf/cdx файлам, находящимся на удаленном сервере ( можно и на локальном компьютере запускать - в отладочных целях ). В общем, как ADS :). Проект - на стадии разработки, не все даже базовые функции еще реализованы, до оптимизации дело еще не дошло. Но работает :). Крутится у меня на сервере несколько дней, подключал до 15 клиентов, пока не падает. Мои программы работают с ним нормально. Преимущества по сравнению с обычным файл-сервером: 1) Безопасность - базы могут быть в каталоге, недоступном для клиентских компьютеров - никто их случайно не удалит и не повредит. 2) Поскольку базы открываются серверной программой, а не клиентской, ее целостности ничего не грозит при случайном отключении клиентского компьютера. 3) значительное уменьшение сетевого траффика. 4) Должен быть, по идее, выигрыш в скорости. 5) Возможность контроля за пользователями с помощью утилиты manage ( можно придумать и другие формы контроля ). 6) Можно будет сделать транзакции, stored procedures на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

alkresin: Pasha пишет: Хочется добавить еще одну файловую функцию, которая возвращала бы информацию о файле: размер, дату и время создания и пр. Тогда можно было бы написать утилиту, которая проверяла и скачивала бы с сервера обновления бинарников посредством leto_memoread. Такой функции и leto_memoread недостаточно для реализации обновления клиентской программы. Я думал об этом пару лет назад и тоже хотел сначала сделать это через letodb. Но проблема в том, что информация о файлах, необходимых для работы клиента ( бинарник, ini, шаблоны отчетов и пр. ) должна лежать на сервере. Клиент может и не знать, какие файлы нужны - при первоначальной установке, или если вы добавили новые файлы ... Т.е. на сервере должен быть, скажем так, ini - файл со списком каталогов и файлов для каждого клиентского модуля, и сервер должен читать этот файл при запуске, а при запросе со стороны клиента отдавать ему список нужных файлов с датой/временем создания, чтобы клиентская утилита могла определить, какие файлы ей затребовать. Словом, на сервер возлагается ряд нетипичных для letodb задач, поэтому я и написал для этого другую серверную программу, которая все это делает. В принципе, я могу ее выложить куда-нибудь, только нету времени потом на вопросы по ней отвечать :)

Andrey: Pasha пишет: Тогда можно было бы написать утилиту, которая проверяла и скачивала бы с сервера обновления бинарников посредством leto_memoread. Pasha пишет: Собственно, такую фунцию можно реализовать с помощью механизма udf, но, мне кажется, она будет нелишней в ядре leto Какие будут мнения ? Полностью поддерживаю ! Эта просто НУЖНАЯ ВЕЩЬ для разработчика !!!

Andrey: alkresin пишет: Словом, на сервер возлагается ряд нетипичных для letodb задач, поэтому я и написал для этого другую серверную программу, которая все это делает. В принципе, я могу ее выложить куда-нибудь, только нету времени потом на вопросы по ней отвечать :) Я и раньше просил про такую программу, но что-то вы не ответили ! Было бы неплохо всем желающим посмотреть, а все остальное потом ....


alkresin: Andrey пишет: Я и раньше просил про такую программу, но что-то вы не ответили ! Было бы неплохо всем желающим посмотреть, а все остальное потом .... http://kresin.belgorod.su/down/letofc.zip В samples - собственно клиентская утилита renew.prg, которая забирает с сервера нужные файлы, bld.bat - чтоб ее построить, dogovor.bat - пример использования. bin/lfcmod.ini - ini - файл на стороне сервера со списками файлов. У меня это работает под одной из старых версий Harbour, какой именно - не помню, компилировал последний раз пару лет назад. Компиляцию с другими версиями не гарантирую, т.к. не озадачивал себя этой проблемой.

Andrey: alkresin пишет: alkresin Спасибо большое !

Pasha: alkresin пишет: Такой функции и leto_memoread недостаточно для реализации обновления клиентской программы. Я думал об этом пару лет назад и тоже хотел сначала сделать это через letodb. Но проблема в том, что информация о файлах, необходимых для работы клиента ( бинарник, ini, шаблоны отчетов и пр. ) должна лежать на сервере. Клиент может и не знать, какие файлы нужны - при первоначальной установке, или если вы добавили новые файлы ... Т.е. на сервере должен быть, скажем так, ini - файл со списком каталогов и файлов для каждого клиентского модуля, и сервер должен читать этот файл при запуске, а при запросе со стороны клиента отдавать ему список нужных файлов с датой/временем создания, чтобы клиентская утилита могла определить, какие файлы ей затребовать. Словом, на сервер возлагается ряд нетипичных для letodb задач, поэтому я и написал для этого другую серверную программу, которая все это делает. Тогда лучше хранить информацию о бинарниках: размер, дату создания, может быть версию, или хэш-значение, или crc32 - в дбф. На сервере пусть запускается утилитка, которая обновляет эту информацию. На клиенте другая утилитка пусть сканирует этот дбф, и, при необходимости, обновляет у себя бинарники посредством leto_memoread. Тогда эту схему можно реализовать через letodb

Pasha: Как передавать от сервера клиенту большие пакеты ? Большие пакеты разбиваются на несколько маленьких, а в leto1.c - leto_Recv есть проверка: if( ( lLen > 0 && lLen+iLenLen+1 <= ptr-szBuffer ) || ( iLenLen >= 10 && *(ptr-1) == '\n' && *(ptr-2) == '\r' ) ) break; При приеме может возникнуть случай, когда 1-й байт пакета, на который дробится большой пакет, больше 10, а два последних - перевод строки. При возникновении такой ситуации передача прерывается. Как раз я наткнулся на такой случай в leto_Memoread. Александр, я вам отправил этот пример. Но как решить этот вопрос в общем случае ? Такая ситуация может возникнуть и при чтении memo-поля

Pasha: Уже разобрался, вопрос снят

Pasha: Добавил поддержку для операции letoTrans. Теперь команды COPY TO/APPEND FROM будут выполняться сервером. Поскольку в стандартных функциях __dbTrans(), __dbCopy(), __dbApp() условие для FOR/WHILE передается как блок кода, а для выполнения на сервере необходимо строковое представление, добавил в tests пример с аналогами этих функций.

Pasha: LETO IndexExt(), OrdBagExt() возвращает имя ".CDX" на верхнем регистре. DBFCDX - на нижнем. Думаю, стоит использовать нижний регистр и для LETO, тем более для unix регистр существенен. Изменить ? Ни у кого проблем с совместимостью с прежними версиями не возникнет ?

AlexMyr: Pasha пишет: Думаю, стоит использовать нижний регистр и для LETO, тем более для unix регистр существенен. Изменить ? +1

PSP: В letodb.ini есть параметр Lower_Path. Может нужно его установку учесть?

AlexMyr: В readme_rus написано: Lower_Path = 0 - если 1, преобразовать все пути к нижнему регистру; т.е. распространяется только на пути.

Pasha: Судя по сырцам, это установка только для сервера, она влияет только на SET( _SET_FILECASE, 1 ) SET( _SET_DIRCASE, 1 ) _SET_FILECASE должен по идее действовать на файловые функции харбора. Но я смотрю, индекс все равно создается с расширением на верхнем регистре, по крайней мере для xHarbour (bagname я формирую на клиенте с использованием IndexBagExt() и передаю на сервер) Так что думаю, на клиенте надо возвращать расширение все-таки на нижнем регистре, хотя бы для совместимости с DBFCDX Еще заодно надо поменять RDDI_ORDBAGEXT, заодно и RDDI_TABLEEXT, да и прочие *EXT - надо возвращать расширение с точкой.

Дигидроген монооксид: Ставлю последний harbour из SVN, последние HwGUI и LetoDB из CVS. Успешно собираю сервер. Собираю Manager. Но при попытке его запустить, он только записывает в лог Application Internal Error - (null) Terminated at: 2010.10.13 16:37:04 Unrecoverable error 9000: Module 'manage.prg' was compiled with unsupported PCODE version 0.3. Please recompile. ------------------------------------------------ ЧЯДНТ?

Pasha: Дигидроген монооксид пишет: ЧЯДНТ? Возможно, letodb manager и hwgui собраны разными версиями harbour, об этом свидетельствует сообщение о неподдерживаемой версии пи-кода Лучше пересобрать также и hwgui

dimao: вот скачал последний тарбол и собрал последним Харбором. скомпилил тест - выполнился. пытаюсь сделать на базе теста свой пример - вылетает. Нашел ошибку - опять вылетает, но по "Error LETO/1 Open error: //127.0.0.1:2812/temp/Nakl1". смотрю процессы - нету letodb! запускаю сервер - лог пополняется сообщением, что он server already running. на предложение остановиться - никакой реакции! Некоторое время назад тут было сообщение от мистера Snake : http://clipper.borda.ru/?1-4-200-00000322-000-20-0#018.001, на которое не последовало реакции (ну или я не увидел). ТАк и должно быть?

Pasha: Проблема у snake была 2 года назад, и проблема непонятная. Сервер letodb падает, но падает как-то непонятно, не совсем, так что потом не запускается ? Прежде всего надо выяснить, почему он упал. Сервер не должен падать, даже если с ним некорректно работает клиент. Что привело к падению сервера ? Какие ошибки в клиентской программе ? В логе что-нибудь есть ?

dimao: в логе ничего нет, кроме сообщений о старте и том, что он уже выполняется. ps не выводит в списке процессов. воспроизвести ситуацию не могу пока, так как на радостях пользовал его по разному. так как за долгие годы подзабыл синтаксис - много раз вылетали проги. я не сразу насторожился при появлении Error LETO/1. в сях и линуксях я не силен, не могу посмотреть, как он определяет наличие выполняющегося себя. ладно, если еще появится трабла - попытаюсь сделать инструкцию по ее повторению.

dimao: ну вот опять! со вчерашнего дня оставил сервер. Сегодня смотрю - нет в процессах, логов нет. на предложение запустить - говорит, что уже работает. на предложение остановить - никакой реакции. Где смотреть? как он видит, что уже запущен?



полная версия страницы