Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что лучше использовать ConnectionPoint или Callback Interfaces [D5, Win2k]


---- ©   (2002-11-28 18:22:00) 


Fantasist   (2002-11-29 03:23:00) [1]


> IConnectionPoint строятся на основе IDispatch


При чем тут IDispatch? Если описание интерфейсов известны, методы IDispatch использовать вовсе не обязательно. Из-за того, что он часто используется - это не является обязаловкой.


> т.е. акт обмена м-ду сервером и клиентом требует 7 прямых
> вызовов. Для in-process сервера или локального out-of-process
> это не страшно, но плохо для удаленного out-of-process.


Ну это не акт обмена. Соеденение, положим, 4 вызова. Если клиент не дурак, то он сохранит указатели на интерфейсы, и не будет второй раз у сервера их запрашивать, так что для рассоеденения достадочно одного вызова. Потом, соедениться и отсоедениться надо, чаще всего, только один раз. Чтобы "послать событие", как раз нужен только один вызов.



> 2. Connection points устроены так, что приконнектившихся
> клиентов трудно различить. Трудно или даже невозможно их
> фильтровать для выполнения разных действий для них.

Енто верно. С другой стороны - это стандарт, значит каждый кому ты покажешь IDL сможет к тебе присоедениться. С callback интерфейсами придется еще и объяснять всем как это callback интерфейс передать.

P.S. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/cmi_c_5h2q.asp


asmith   (2002-11-28 19:24:00) [2]

Можно руководствоваться такими принципами:
1. IConnectionPoint строятся на основе IDispatch и поэтому требуют больших накладных расходов при работе, если клиент обращается к серверу, нужны такие вызовы:
a) Server.QueryInterface (IConnectionPointContainer)
b) IConnectionPointContainer.FindConnectionPoint (CP)
c) IConnectionPoint.Advise (IUnknown),
последний вызов требует еще один QueryInterface от сервера клиенту. Отсоединение ивента снова потребует 3 вызова:
a) Server.QueryInterface (IConnectionPointContainer)
b) IConnectionPointContainer.FindConnectionPoint (CP)
c) IConnectionPoint.Unadvise (Cookie)
т.е. акт обмена м-ду сервером и клиентом требует 7 прямых вызовов. Для in-process сервера или локального out-of-process это не страшно, но плохо для удаленного out-of-process.
2. Connection points устроены так, что приконнектившихся клиентов трудно различить. Трудно или даже невозможно их фильтровать для выполнения разных действий для них.


Наверх

Титульная страница Поиск, карта сайта Написать письмо