powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация файл-сервера.
12 сообщений из 12, страница 1 из 1
Реализация файл-сервера.
    #33485217
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем!

Платформа Win32, Как в файл-сервере можно сделать многопользовательские блокировки?

Тоесть возмьем например MS-Access. Они позволяют шарить файл БД по локалке и одновременно работать с ним разным пользователям.

Какое АПИ они используют для блокировки участков файла и какие паттерны взаимодействия и блокировок при работе?

Меня интересуют различные варианты решения этой задачи.

Всем Спасибо!
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485333
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shuklinПлатформа Win32, Как в файл-сервере можно сделать многопользовательские блокировки?......

Обычно, практически любой файл-сервер реализует данный функционал. Различают физические блокировки: на весь файл и на участок файла. Порой, что бы разруливать клинчи - над физической блокировкой делают (могут делаться) логические блокировки. Данным подходом пользуется DBF "формат". Пример...
Физическая блокировка байта, со смещением..
0x80000000 = блокирует весь файл...
Физическая блокировка байта со смещением..
0x80000000 + Nзаписи = блокирует конкретную запись в файле...

с уважением
(круглый)
ЗЫ
Блокировки поддерживаются фатами, энтээфэсами.. Под досами, виндами, новеллами и т.д..
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485350
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Обычно, практически любой файл-сервер реализует данный функционал.

Собственно в этом то и вопрос. Любой как раз не нужен. Нужно написать свой.

Дабы уменьшить степень велосипедности при его написании поднял вопрос.
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485367
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shuklinДабы уменьшить степень велосипедности при его написании поднял вопрос.

Вы указали Win32. Она базируеться на фатах, либо энтээфэсах. Там блокировки от родясь и живут... Любой апи по файловому доступу Вам поможет...

либо я не догоняю тонкости вопроса...

с уважением
(круглый)
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485433
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Любой апи по файловому доступу Вам поможет...

либо я не догоняю тонкости вопроса...


Ну "любой апи" подразумевает наличие нескольких вариантов. Тот же LockFile или LockFileEx - что лучше? А может есть что то еще лучше? Потом от блокировки региона до многопользовательской БД есть некоторое расстояние. Так как принято пользоваться регионами? Каковы общепринятые паттерны и сиквенсы использования этих средств в файл - серверной БД? Какие вообще есть подходы к блокировке? Можно ведь блокировки отдельным файлом хранить (похоже для этого Access ldb рядом создает?) Или блокировать на прямую сам файл с данными ....
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485455
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот скажем решу я использовать отдельный файл с картой check-in - check-out - паттерн будет простой. заблокировать - проверить стоит ли 1 если нет установить - разблокировать. тут же проблема - а что если клиент умрет. ведь блокировка умрет с клиентом, а не 1 в карте ...
а если блокировать файл с данными, то на 100000 строк, может быть до 100000 разных блокировок, - это ж любую ОС замучит до невменяемости.
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485673
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shuklin...тут же проблема - а что если клиент умрет. ведь блокировка умрет с клиентом, а не 1 в карте ......

тут фигня следующая...
ну во первых напрашиваеться вопрос - а нафига не использовать нечто большее чем файловый сервис...но этот вопрос опустим...
задаваясь теми вопросами, что озвучили Вы - становиться понятно, что нуна помимо блокировок ышо нечто отвечающее на вопрос - а жив ли пациент ? Приходилось и такой кулич лепить... было дело...правда не на файловом сервисе, но суть не меняеться... Использовались глобальные семафоры от новелла. В принцепе механизация не важна - сосредоточиться прошу на самой идеи...

смысл следующий... есть некий ресурс однозначно идентифицирующиеся в сети и проассоциировано с блокировкой какой либо станции. этот ресурс имеет состояния и ссылку на следующий... поведение станции простое: станция ищет хвост таких ресурсов (если имеются) и контролирует последний. Тот в свою очередь должен изменять состояние раз в некий интервал времени. сама станция создаёт свой ресурс, ссылающийся на последний и отслеживая интервалы времени меняя его состояние. получаеться очередь "дышащих" неких ресурсов. В случаи сбоя (умер) - рабочая станция берёт идентификатор ресурса "отца" умершего, если и он "приказал" - следующий и так до головы. Если очередь пуста (дошли до головы) - мы имеем право на доступ к файлу..записали что хотели - ничего не делаем (либо просигналили хвосту, что отпустили - для оптимизации)...

данная логическая блокировка - позволяет отслеживать работоспособность станций стоящих (заблокировавших) Ваш файл. данная метода была успешно применена при работе в сети, без выделенного файл сервера, ресурсами выступали (как уже было сказано) - глобальные семафоры Novell...

с уважением
(круглый)
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485726
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0сосредоточиться прошу на самой идеи... смысл следующий...

Спасибо! Вот как раз узнать у народа, кто с подобными задачами сталкивался, и общие идеи их решения, детальнее то оно и не нужно, и хотел в результате этого обсуждения.
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33485735
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0В случаи сбоя (умер) - рабочая станция берёт идентификатор ресурса "отца" умершего, если и он "приказал" - следующий и так до головы.

Тоесть каждая станция при подключении должна опростить всю эту очередь и собрать инфу, кто перед ней в очереди за кем стоит - иначе ведь, если тот за кем стоим умер, уже не узнать за кем стоял он.

И тут нужно иметь способность общаться двум разным станциями.

А я бы хотел обойтись только файловыми блокировками, без открытия сетевых соединений.
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33487356
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shuklinТоесть каждая станция при подключении должна опростить всю эту очередь и собрать инфу, кто перед ней в очереди за кем стоит - иначе ведь, если тот за кем стоим умер, уже не узнать за кем стоял он.

И тут нужно иметь способность общаться двум разным станциями.

А я бы хотел обойтись только файловыми блокировками, без открытия сетевых соединений.

опрашивать нужно последнего на предмет жив-не жив. признак жизни - его динамическое изменение во времени.

общаться нужно не с танциями а с ресурсами...если Вы в своих рассуждениях говорите о файл-сервере, то аллокировать ресурсы можно на нём. какие именно и как - ну тут дело фантазии. напрашиваеться файловый сервис...

пример (как одно из решений. даже не решений - а что первое зашло в голову. на семафорах просче конечно же :) )...
каждая рабочая станция имеет свой уникальный идентификационный номер. данный номер ставиться в соответствие с указателем на ячейку в неком файле управления.каждой ячейке соответствует указатель на ячейку парента, переключаемый признак жив-не жив. в заголовке файла прописано начало очереди и ей конец...

вроде так..
(круглый)
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33488125
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0
вроде так..


Идею понял. Спасибо.

Возмжно, что признак жив-нежив я смогу реализовать на основе LockFile - она отпускает ячейку в файле при смерти клиента - не понадобяться мигалки.
...
Рейтинг: 0 / 0
Реализация файл-сервера.
    #33488148
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Некоторые серверы закрывают соединение при превышении порога молчания.
Кроме того сервер не обязан физически лочить разделяемый ресурс, он может не пускать запрос в зависимости от дескриптора ресурса.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
typedef struct{
      LockType  type;
      IdConnect idc;
}ResState;

map<IdRes,ResState> mResourse;
map<IdConnect,clock_t>  mConnects;

bool GetRes(IdConnect ic, IdRes ir, LockType lt)
{
      //Если ресурс свободен - дать и залочить
}

//Висит на таймере
void FreeLostConnect(clock_t delta)
{
     map<IdRes,ResState> ::iterator ir;
     map<IdConnect,clock_t>::iterator ic;
     clock_t now = clock();
     for(ic=mConnects.begin(); ic != mConnects.end();){
          if ( now- ic->second >= delta){
            // освободить все ресурсы, занятые коннектом
            // удалить коннект
          }
           ic++;
     }

}

...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация файл-сервера.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]