Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2015, 11:52   #1
Layman
 
Регистрация: 18.10.2015
Сообщений: 3
По умолчанию Использование одного соединения разными приложениями

Добрый день.

Проблема в следующем. Имеется несколько приложений, которые используют соединение с одной базой данных на сервере. На сервере стоит firebird в режиме classic, соответственно создается по одному процессу на каждое приложение. Сейчас ситуация такая, что 100 пользователей запускает по 10 приложений одновременно к примеру, т.е. уже 1000 процессов на сервере, это крайне не расточительная роскошь.

В связи с этим вопрос, можно ли на клиенте инициировать одно подключение, чтобы, например, хэндл этого подключения передавался в другие программы для использования.

Т.к. я недопрограммист, а сисадмин, хотелось бы найти правильный вариант решения данной задачи.
Были мысли по объединению всех программ в одно приложение с разбивкой по юнитам и использовать текущее подключение, или загонять все приложения/формы в DLL и туда передавать хэндл подключения.

Или может есть все-таки решение легкое и стандартное?)
Layman вне форума Ответить с цитированием
Старый 18.10.2015, 13:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В связи с этим вопрос, можно ли на клиенте инициировать одно подключение, чтобы, например, хэндл этого подключения передавался в другие программы для использования.
Только в случае трехзвенки. Т.е. клиенты отправляют запросы на некое приложение, а уже приложение общается с базой.
Цитата:
Т.к. я недопрограммист, а сисадмин
То чего сидим? Кого ждем? Пора преконфигурировать огнептицу в многопользовательское состояние, и не дятловать себе мозг сложными решениями.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.10.2015, 13:18   #3
Layman
 
Регистрация: 18.10.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
То чего сидим? Кого ждем? Пора преконфигурировать огнептицу в многопользовательское состояние, и не дятловать себе мозг сложными решениями.
Це страшно спросить, а сейчас в каком состоянии находится огнептиц?)
Layman вне форума Ответить с цитированием
Старый 18.10.2015, 13:58   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дак ты же сам сказал:
Цитата:
firebird в режиме classic, соответственно создается по одному процессу на каждое приложение
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.10.2015, 14:06   #5
Layman
 
Регистрация: 18.10.2015
Сообщений: 3
По умолчанию

Причем тут это) Есть база на сервере, к ней цепляется много пользователей одновременно. Это и есть многопользовательский режим. И какая разницы поток это или процесс.. Так что огнептиц в моем случае находится в режиме многопользовательской среды.
Layman вне форума Ответить с цитированием
Старый 18.10.2015, 15:06   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ППЦ... Тогда какая разница сколько будет подключений?
Хорошо, допустим ты подключения свернул в мэйнстрим, а транзакции? Их тоже будешь в одну паковать? Ерунда какая-то...
Делай тогда трехзвенку. Но учти - трехзвенка все равно повторит те 1000 подключений как 1000 потоков + морока ее эксплуатации.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2015, 12:39   #7
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

А вариант с запретом запуска "дубля" приложения на 1 ПК не решит проблему? Через тот же мутекс.
Код:
if GetLastError <> ERROR_ALREADY_EXISTS then
begin
Sleep(2000);//Время на выгрузку пограммы если она есть
end;
CreateMutex(nil, True, 'REESTERSKOMLEKS2013');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
showmessage('Программа уже запущена!');
SetForegroundWindow(FindWindow('TSTART_FORM',nil));
Exit;
end;
P/S: Этот код в Projekt/View Sorce
uses-Windows,Dialogs

Кждое приложение может создавать свою мютекс в мое примере это REESTERSKOMLEKS2013, вам никто не запрещает в каждом из 10 приложений создавать свой уникальный мютекс и при старте любого проверять
их по последней ошибке. (Если мютекс с таким именем уже есть GetLastError будет равно мютексу с таким же именем)

Например:
приложение 1 создало мютекс с именем PR1
приложение 2 создало мютекс с именем PR2
приложение 3 создало мютекс с именем PR3

Теперь запрет для первого приложения:

Код:
CreateMutex(nil, True, 'PR2');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
showmessage('Приложение 1 не может быть запущено,закройте приложение 2 ');
ExitProcess(0);
end;
CreateMutex(nil, True, 'PR3');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
showmessage('Приложение 1 не может быть запущено,закройте приложение 3 ');
ExitProcess(0);
end;
CreateMutex(nil, True, 'PR1');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
showmessage('Приложение 1 уже запущено,курите,пейте чай и ждите пока оно запустится ');
SetForegroundWindow(FindWindow('TSTART_FORM',nil));
Exit;
end;
И.Т.Д. Код с руки писал вам, не исключаю что потребуются "допилки"
Пишу много и развернуто

Последний раз редактировалось Heneken87; 27.10.2015 в 13:01.
Heneken87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параллельный вызов одного и того же метода с разными входными данными maxspace C# (си шарп) 1 16.11.2014 23:33
Несколько DLL. Использование одного и того же подуля. Selestis Lazarus, Free Pascal, CodeTyphon 1 07.01.2011 13:25
Использование одного сообщения WM_COMMAND при исполнении другого nickel-j Общие вопросы C/C++ 1 26.05.2010 22:52
Использование одного объекта в двух потоках Anekdot Общие вопросы Delphi 0 16.03.2010 19:37
Возможно ли использование нескольких столбцов подстановки для одного поля? jonni Microsoft Office Access 10 20.05.2009 22:25