Число подключенных клиентов к Dcom-серверу

V88

Well-known member
22.10.2008
51
0
#1
Всем доброго времени суток! :(
Есть сервер на основе технологии DCOM. И ести клиент, который подключается посредством SocetConnection. Ответьте мне пожалуйста каким образом можно узнать число одновременно подключенных клиентов, а также узнать когда клиентов стало больше или меньше. Я пробовал делать следующим образом (как описано в статье http://www.delphimaster.ru/articles/ado_com/index.html ):
Теперь вернемся к индикации числа подключенных к серверу клиентов. Для этого расположим на форме компонент TLabel и его свойству Caption зададим значение "0". Кроме того, опишем процедуру изменения значения счетчика. Переменная FCount содержит число подключенных к серверу клиентов. Процедура UpdateCount изменяет значение счетчика подключений.

type
Код:
 TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
FCount: Integer;
public
{ Public declarations }
Procedure UpdateCount (FCon: bool);
end;
При установке соединения в процедуру передается значение True, при отключении False.
Код:
Procedure TForm1.UpdateCount (FCon: Bool);
Begin
If FCon Then
Inc(FCount)
Else
Dec(FCount);
Label1.Caption:=intToStr(FCount);
End;
Для того чтобы значения счетчика изменялост описанную процедуру необходимо поместить в события модуля RDM Create и Destroy соответственно.
Код:
procedure TSrvApp.RemoteDataModuleCreate(Sender: TObject);
begin
Form1.UpdateCount(True);
end;

procedure TSrvApp.RemoteDataModuleDestroy(Sender: TObject);
begin
Form1.UpdateCount(False);
end;
Но сервер на этапе TSrvApp.RemoteDataModuleCreate зависает намертво :unsure: . Путем многих проб и усилий выяснилось, что сервер зависает из-за обращения из RemoteDataModule к форме Form1 сервера. Что делать? :please:

P.S. Гуглил два вечера :) , ничего стоящего кромеме выше представленнлй статьи не нашел.
 

Titan

Well-known member
10.06.2004
105
0
#2
у вас явно какая-то элементарная ошибка.

если еще актуально - присоедините проектик.
 

V88

Well-known member
22.10.2008
51
0
#3
Да. Элементарная ошибка. Не знаю почему, но для Label1.Caption надо было обязательно присвоить 0 (или какое-нибудь другое значение целого типа). И все же после подключения 9-го клиента сервер зависает. Может где-то ставиться лимит подключенных клиентов?
Сам проект весит много. Во вложении простой пример без лишнего кода. Для его работы необходимо на диске C:\ создать файл 111.txt
 

Вложения

V88

Well-known member
22.10.2008
51
0
#4
... Поторопился с выводами...
Число подключаемых клиентов я думаю не ограничено по умолчению. Оказывается все дело в компоненте TLabel. Абсолютно не знаю почему :( , но на сервере TLabel.Caption отказывается принемать значение больше 9. Потестил с TEdit - он вообще не принемает никакие значения, сервер просто зависает. Потом решение нашлось с компонентом TPanel. Все работает на ура... пока что. Не знаю как с другими компонентами. Буду тестить.
 

Titan

Well-known member
10.06.2004
105
0
#5
Думаю, что проблема, кроется именно в вашем дополнительном коде.
Проект, который вы приложили, ничего из себя не представляет, обычный пример с использованием 3-х звенки.
Количество отображается нормально.

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

V88

Well-known member
22.10.2008
51
0
#6
Все, я разобрался. Тему можно закрыть. :)
Как я писал выше, все дело было в компоненте TLabel, вместо него просто я использовал TDBText и проблема решилась.
P.S. В примере, выложенным выше мною, также использовался TLabel. Там счетчик может только инкрементировать только до 9 почему-то. Я не стал разбирать почему. Кто знает объясните, просто ради интереса.
 

Titan

Well-known member
10.06.2004
105
0
#7
>>вместо него просто я использовал TDBText и проблема решилась.
это существенно.

>> Там счетчик может только инкрементировать только до 9 почему-то. Я не стал разбирать почему.

запускал я ваш пример 12 раз и счетчик показал 12....
 

V88

Well-known member
22.10.2008
51
0
#8
запускал я ваш пример 12 раз и счетчик показал 12....
Может у меня просто Delphi, отличной чем у вас версии. У меня Delphi 7. Пробовал также запускать этот же пример на другом компе - тоже самое. На другом компе тоже был установоен Delphi 7. У вас какая версия?
 

Titan

Well-known member
10.06.2004
105
0
#9
Вообще от версии Delphi не особо должно зависеть, как мне кажется.
Запускал на работе, либо на 2010 или на XE , точно не помню.
 

V88

Well-known member
22.10.2008
51
0
#10
Какая разница какая версия ) Главное, что у меня все зароботало как надо. И все. Тему можно закрыть, ОДНОЗНАЧНО.
Зачем себе мозг забивать))))