![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многопоточность при работе с базой [D5, IB6.x]
leonon © (2004-08-04 17:43:00)Хочу сделать HTTP сервер, который взаимодействовал бы с базой данных. При формировании ответа на запрос пользователя работает примерно такой код:
var
Query : TIBQuery;
begin
Query := TIBQuery.Create(Nil);
try
Query.DatabaseName := IBDatabase;
Query.SQL.Add(какой-то запрос);
Query.Open;
{обработка данных}
finally
if Query.Active then Query.Close;
FreeAndNil(Query);
end;
end;
Все работает просто замечательно, если коннектится 1 пользователь. Но если их больше и одновременно запрашивают документы, то вылезает ошибка EIBError - немогу прочитать данные из соединения. Как быть?
Desdechado (2004-08-05 11:12:00) [1]а теперь построй мат модель твоей СМО и проанализируй, достаточно ли одного обслуживающего прибора или надо несколько при известной интенсивности запросов, распределении времени обслуживания и ограничений на него
leonon (2004-08-04 19:38:00) [2]Пользователей 50-70, запросы средней тяжести. Приложение общается с базой локально. Сервер 1G Xeon
Desdechado (2004-08-04 19:25:00) [3][10]
зависит от интенсивности и тяжести запросов, а также от кол-ва юзеров
dtm (2004-08-04 19:02:00) [4]Instancing. Use the instancing combo box to indicate how your remote data module application is launched. The following table lists the possible values:
Value Meaning
1. Internal
The remote data module is created in an in-process server. Choose this option when creating a remote data module as part of an active library (DLL).
2. Single Instance
Only a single instance of the remote data module is created for each executable. Each client connection launches its own instance of the executable. The remote data module instance is therefore dedicated to a single client.
3. Multiple Instance
A single instance of the application (process) instantiates all remote data modules created for clients. Each remote data module is dedicated to a single client connection, but they all share the same process space.
leonon (2004-08-04 18:24:00) [5]Хорошо, тогда такой вопрос, что лучше ставить их в очередь, или делать параллельные соединения?
dtm (2004-08-04 18:20:00) [6]Ты когда будешь создавать (или уже создавал) библиотеку типов сервера приложений, укажи в графе Instance значение Multi-threaded.
Хотя конкретный выбор этого значения зависит от назначеия программы и ещё многих факторов.
leonon (2004-08-04 18:17:00) [7]Я так и думал... :(((
Desdechado (2004-08-04 18:15:00) [8]небе на каждого пользователя придется открывать отдельное соединение или же ставить их в очередь и обрабатывать последовательно. Это потому, что IB-клиент не является tread-safe, т.е. через одно подключение 2 параллельных запроса подерутся.
leonon (2004-08-04 18:09:00) [9]Мне нужно, что бы мое приложение выступало в роли сервера приложений, осуществляло всю бизнес-логику по работе с базой, а ответы кидало HTML документами, ну и соответственно обрабатывало запросы клиентов. Т.е. на их стороне обычный броузер, посредством которого они с моим сервером работают.
dtm (2004-08-04 18:01:00) [10]Так тебе Web - сервер нужен или App Server?
leonon (2004-08-04 17:58:00) [11]Использую библиотеку Indy. В качестве сервера выступает TIdHTTPServer.
dtm (2004-08-04 17:55:00) [12]А что за "НТТР сервер"? =)
leonon (2004-08-04 17:50:00) [13]Нет с FireBird 1.02
dtm (2004-08-04 17:48:00) [14]А по-больше информации?
Не на Yaffil Personal случайно работаешь?