Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение прервавшегося коннекта [D7, XP]


Страницы:   1 2

Laguna ©   (2011-11-09 12:01:00) 

Ситуация такая. БД находится на выделенном сервере. Разные пользователи подключаются к БД. Чтобы отследить кто работает в данный момент, из каждой программы пользователя делаю запись в некий dat- файл, расположенный на сервере на onCreate формы(во время открытия таблиц), говорящей о том, что конкретный пользователь работает. На onDestroy соответственно запись из dat-файла удаляю. Подозрение возникло в момент, когда якобы на связи находился долго один из пользователей. Зайдя на сервер по открытым файлам смотрю - все чисто, а запись в dat-файле осталась висеть. Получается, что у пользователя не отработало корректное закрытие формы(завис и т.д.). Каким образом сделать так, чтобы такие ситуации как то отлавливались? В данном случае Сервер - это просто хранилище файлов с расшаренным ресурсом.


Laguna   (2011-11-09 15:05:00) [21]


> Чем уж так хорош этот ADS Local, что ради него стоит терпеть
> такой геморрой?

Ну почему геморой? Когда отошел от BDE много СУБД пробовал. ADS больше всех понравился. Так и подружились. Не было бы проблем, если бы организация официально купила нормальную полную версию.


Sergey13   (2011-11-09 14:49:00) [22]

Чем уж так хорош этот ADS Local, что ради него стоит терпеть такой геморрой?


Ega23   (2011-11-09 14:10:00) [23]


> Если быть точнее, то не более 5 чел. могут открыть таблицу
> одновременно.


Я из программы, залогинившись, могу открыть десять тредов, каждый с персональным коннектом.
Я могу написать AppServer, к которому будет коннектится стопицот пользователей, а он сам будет иметь всего один коннект к БД.


Laguna   (2011-11-09 13:56:00) [24]


> Одновременное соединение 5 пользователей, или одновременное
> обслуживание не более пяти коннектов к БД? Это разные вещи.
>

Если быть точнее, то не более 5 чел. могут открыть таблицу одновременно.

> Медвежонок Пятачок ©   (09.11.11 13:42) [8]
хм.. все так. Функция просмотра законнектившихся по идее подключена у контролирующего пользователя. Обрубил на корню... Я прям уже и забыл что хотел спросить... Короче "контролер" тоже пользуется теми же таблицами. Он посмотрит кто на связи и в каком подразделе. Подразделов 2 , в каждом из которых открываются свои таблицы. Если в первом разделе доступ закрыт(он посмотрел), то попытается войти во второй, если там меньше 5 чел. Скорее всего задача главнее должна отлавливать зависшие коннекты.


Медвежонок Пятачок   (2011-11-09 13:42:00) [25]

Допустим, что ты успешно поборол эффект оборвавшегося коннекта и в дат файле у тебя все зашибись логируется невзирая ни на что.
что ты в нем увидишь?

ты в нем увидишь, что внутри файла никогда не бывает больше пяти юзеров одновременно.

Так их на сервере и так по любому не бывает больше пятерых одновременно потому что Сервер(ADS Local) выставляет ограничение на одновременное соединение 5 польз.


Медвежонок Пятачок   (2011-11-09 13:37:00) [26]

если надо "следить за рационалным использованием", то это подразумевает, что у тебя уже есть "рациональное использование" и ты за ним следишь.

вопрос: зачем следить за тем, что рационально?
чтобы что-то изменить в уже рациональном использовании ресурса?


Ega23   (2011-11-09 13:36:00) [27]


> Сервер(ADS Local) выставляет ограничение на одновременное
> соединение 5 польз.


Одновременное соединение 5 пользователей, или одновременное обслуживание не более пяти коннектов к БД? Это разные вещи.


Медвежонок Пятачок   (2011-11-09 13:33:00) [28]

классическая иллюстрация
объективно стоит задача А
программист решает не ее а задачу Б
при этом пишет код, алгоритм которого ни к А ни к Б отношения не имеет.


Laguna   (2011-11-09 13:21:00) [29]

Сервер(ADS Local) выставляет ограничение на одновременное соединение 5 польз. Вот и нужно следить за рациональным использованием ресурса. Да сервер я описал выступает ка обычное хранилище, а не полноправный SQL-сервер. Касаемо сесий, то что то я ничеко для ADS не нашел. Там что то упоминалось, мол если работаем через BDE, а так ничего другого не нашел.


Медвежонок Пятачок   (2011-11-09 13:03:00) [30]

Чтобы отследить кто работает в данный момент

Зачем?


Ega23   (2011-11-09 12:48:00) [31]


> Каким образом сделать так, чтобы такие ситуации как то отлавливались?


Так, как это сделано, например, в PHP.
На сервер приходит некий запрос. Смотрим, есть ли в параметрах запроса SID (SessionID).
Если нет - создаём этот SID, выставляем ему время жизни (Now + timeout, например полчаса), заносим в список активных сессий.
Если есть - ищем этот SID в списке активных сессий. Если его уже нет - отказ от обработки запроса. Если он ещё есть - реинициализируем его время жизни.

Отдельно на сервере мониторим список активных сессий. Если нашлась какая-то, у которой время жизни < Now, то её выкидываем.

Если всё делать правильно, то задача не такая уж и тривиальная, надо аккуратно всё по потокам расписать.


clickmaker   (2011-11-09 12:23:00) [32]

а почему в dat-файл, а не в БД?

> Каким образом сделать так, чтобы такие ситуации как то отлавливались?
>

фиксировать время последней активности юзера, периодически проверять и рубить неактивные в течение какого-то времени сессии


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо