|
|
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Существуют ли какие нибудь методики определения на сервере, того факта что клиент отключился? Дмитрий Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2005, 20:53 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Про дком не скажу, но в корбе (dcom идеологически является калькой с корбы) простого способа нет. Обычно предлагается использовать разные методики определения активности клиента: 1. callback серврером клиента. Но тут понятно 2. Сервис времени жизни объектов. Все зависит от бизнес логики приложения. Самый простой вариант вести учет времени последнего вызова объекта сервера клиентом и по истечению определенного времени освобождать ресурсы. Где-то я читал, в дкоме реализованы так называемые heart beats сигналы. Т.е раз в определенное клиент и сервер обмениваются определенными пакетами по которым и определяется наличие логического соединения между ними. все наши на www.corba.kubsu.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 00:05 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
В COM все это делается через reference count. Т.е. Соединяясь клиент вызывает AddRef() а отсоединяясь вызывает Release(). Клиент не идентифицируется. Просто считаются ативные соединения. Тоже самое должно происходить и в DCOM. Проблемы возникают тогда, когда клиент забывает вызвать Release() или умирает не успев. Но это на одном компьютере. В вашем случае могут еще и провода перерезать. Существуют и более продвинутые механизмы. Например связка интерфейсов IDataObject - IAdviseSink. Если клиент хочет получать уведомления от сервера, то он должен иметь IAdviseSink, а сервер - IDataObject. Для того, чтобы подписаться на уведомления клиент вызывает IDataObject->DAdvise сервера и получает назад идентификатор соединения. А когда хочет отсоединиться вызывает IDataObject->DUnadvise и передает в нем тот самый идентификатор соединения. Таким образом сервер может вести учет клиентов. Причем связи могут быть как горячими, когда само уведомление содержит обноаленные данные, теплыми, когда сообщается что данные изменились но не сами данные так и холодными, когда клиент опрашивает сервер. Все это нормально работает в СОМ, будет ли работать в DCOM не знаю, возможно придется писать свой Marshaling. Проблемы остаются теми же - когда клиент забывает вызвать Release() или умирает не успев + провода... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 02:47 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
rodb Существуют ли какие нибудь методики определения на сервере, того факта что клиент отключился? Дмитрий Posted via ActualForum NNTP Server 1.3 всё таки надо уточнить. Судя по вопросу, тебе надо чтобы сервер знал отвалившийся клиент? Т.к. например, если на клиенте пошла транзакция, и через 3 клавиши его вырубить, то сервер автоматически начинает откат. Если тебе потерянные коннекты надо на сервере, то это язык сервера и форум тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 11:06 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Petro123 rodb Существуют ли какие нибудь методики определения на сервере, того факта что клиент отключился? Дмитрий Posted via ActualForum NNTP Server 1.3 всё таки надо уточнить. Судя по вопросу, тебе надо чтобы сервер знал отвалившийся клиент? Т.к. например, если на клиенте пошла транзакция, и через 3 клавиши его вырубить, то сервер автоматически начинает откат. Если тебе потерянные коннекты надо на сервере, то это язык сервера и форум тоже. бес попутал :) - у тебя сервер DCOM имеется ввиду. Тогда ответили :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 11:08 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Спасибо всем отвечающим. Ответы как раз в тему. Да. Имеется ввиду удаленный DCOM сервер и обрыв проводов. Интересен тот факт, что приблуда TypeLibrary в среде билдер, которая создает реализацию Impl сервера, не создает деструктор. Я попробовал вручную его туда поставить, и он действительно вызывается если удаленный клиент корректно завершает работу. Вот с обрывом проводов, тут присутствующие верно подметили. Если провода оборвать, то объект сервера сидит в памяти компьютера ничего не подозревая об отвалившемся клиенте. Дмитрий Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 11:54 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Научите как серверному объекту DCOM убить самому себя правильно в стиле COM. Дмитрий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 12:29 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Всем, А можно ли теоритически, в серверном COM объекте вычислить IP или MAC адрес клиента с целью запретить создевать более одного серверного потока на клиентскую машину? Дмитрий Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 13:51 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
да, если апосля коннекта передать серверу эту инфу с клиента :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 21:49 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
JibSkeart, >да, если апосля коннекта передать серверу эту инфу с клиента :) согласен. наверное это единственный способ. Может кто еще какие идеи подаст? Дмитрий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2005, 22:12 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
покопай по ответу AndreiNz . Всё остальное Iadvise и т.д. предпологает - подписка и отписка от оповещения. Что в случаях потери кабеля не работает. Посмотрикак OS определяет что приложение зависло? Ведь оно не отвечает. В пармеире реестра есть число миллисекунд, через которое неответивший клиент считается мёртвым. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 11:10 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Вообще, в коммуникационных системах существует стандартное решение подобной проблемы: Hartbeat. Т.е вы посылаете предельно простое сообщение и ожидаете ответ, если ответа нет, то соединение потерянно. В СОМ можно, например, унаследоваться от IAdviseSink, добавив к нему метод HartBeat , который должен возвращать S_OK. И вызывать его периодически. Посмотреть, что он вернет, если разорвать провода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2005, 22:44 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz, И всем >Т.е вы посылаете предельно простое сообщение и ожидаете ответ, если ответа нет, то соединение >потерянно. В СОМ можно, например, унаследоваться от IAdviseSink, добавив к нему метод HartBeat , Спасибо большое за проявленное внимание. Дмитрий Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2005, 10:27 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNzВообще, в коммуникационных системах существует стандартное решение подобной проблемы: Hartbeat. Т.е вы посылаете предельно простое сообщение и ожидаете ответ, если ответа нет, то соединение потерянно. В СОМ можно, например, унаследоваться от IAdviseSink, добавив к нему метод HartBeat , который должен возвращать S_OK. И вызывать его периодически. Посмотреть, что он вернет, если разорвать провода. думаю можно ещё проще: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2005, 11:31 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Petro123 AndreiNzВообще, в коммуникационных системах существует стандартное решение подобной проблемы: Hartbeat. Т.е вы посылаете предельно простое сообщение и ожидаете ответ, если ответа нет, то соединение потерянно. В СОМ можно, например, унаследоваться от IAdviseSink, добавив к нему метод HartBeat , который должен возвращать S_OK. И вызывать его периодически. Посмотреть, что он вернет, если разорвать провода. думаю можно ещё проще: Код: plaintext 1. Пожалуй, Да. Только в данном случае вы вызываете 2 метода вместо одного. А, принимая во внимание то, что общение еидет через сеть, один метод может оказаться эффективнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2005, 22:20 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Если вызвать один, то клиент не умрёт никогда, т.к. вы нарушили его счётчик, по которому он обязан умереть. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2005, 11:01 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Да. нестоит забывать что heart beats не работают в WAN. Поэтому я буду использовать допотопную методику поддержания жизни серверных объектов - импульсами с самих клиентов и умирания по тайм-ауту. Не подскажет ли уважаемый ALL какие таймеры (и как) нужно использовать в серверных объектах DCOM для самоуничтожения. Я поставил TTimer - ан нет. Не хотит он нормально работать в многопоточной среде. Валится. Дмитрий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2005, 13:53 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
Вообще-то я говорил про HeartBeat как отдельный метод, а вовсе не про вызов одного из Release или AddRef в отдельности. И почему это но не работает в WAN? Если реализация HeartBeat сделана через UDP, то у вас будут проблемы, Если же используется TCP/IP, то проблем быть не должно. Вы же говорите о DCOM, который сидит на TCP/IP. Для таймера, в крайнем случае можно запускать отдельную Thread, которая ничего не делает, а только спит определенное время, а когда просыпается, то делает то, что вам нужно и умирает. Если же клиент откликается до того как истекет интервал, то вы убиваете Thread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2005, 22:09 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz, Разрешите поблагодарить вас за поддержку данной дискусии и поздравить с Новым Годом! >Для таймера, в крайнем случае можно запускать отдельную Thread, которая ничего не делает, а только >спит определенное время, а когда просыпается, то делает то, что вам нужно и умирает. Если же клиент >откликается до того как истекет интервал, то вы убиваете Thread. Одна из проблем на которую я наступил в BCB это то, что серверный COM объект не убивается, при убитии его извне(не клиентом) Например: Имею указатель на обертку объекта СОМ на серверной стороне. TTCOMServerImpl *a_Thread ..... while(a_Thread->GetUnknown()->Release()) { int a; a++;}; Высвобождаю ссылки на объект. Согластно общепринятым правилам СОМ - этот объект должен умереть. Но он в действительности убивается не сразу. Я поставил Beep() - ы в тело объекта и Оказывается он еще определенное время продолжает выполнять запросы клиента. Я заметил что это длиться до тех пор пока я не активирую мышью GUI сервера. Как буд-то среда СОМ начинает убивать ком объект только после WM_ сообщений контейнера в котором находится СОМ объект. Спасибо. Дмитрий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2005, 12:48 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
rodb, Я сам DCOM-ом не пользуюсь. Предпочитаю использовать TCP/IP для межкомпьютерного взаимодействия. А локально использую СОМ. Из того, как я понимаю ситуацию, сервер (не только DCOM, но и любой сервер) желательно держать в памяти в постоянной готовности к запросам. То есть то что сервер не убивается, может оказаться положительным фактором. Спасибо, за поздравления. Вас так же поздравляю с наступающим Новым Годом. Андрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2005, 22:59 |
|
||
|
DCOM отключение клиентов
|
|||
|---|---|---|---|
|
#18+
AndreiNz, >Из того, как я понимаю ситуацию, сервер (не только DCOM, но и любой сервер) желательно держать в >памяти в постоянной готовности к запросам. То есть то что сервер не убивается, может оказаться >положительным фактором. Для локоальных приложений скорее всего это обязательное правило, стабильной работы. А вот для распределенных я уже думаю что проблема. Причины - сетевые проблемы. Например сеть упала а объект остался в памяти на серверной машине и серверное приложение думает что он живой. Потом есь причины - секьюрити, Когда на серверное приложение просто обязано убивать клиентов по своим соображениям. Дмитрий Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2005, 11:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33447946&tid=2032209]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 343ms |

| 0 / 0 |
