![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение прервавшегося коннекта [D7, XP]
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-файл, а не в БД?
> Каким образом сделать так, чтобы такие ситуации как то отлавливались?
>
фиксировать время последней активности юзера, периодически проверять и рубить неактивные в течение какого-то времени сессии