Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций РСОИ.doc
Скачиваний:
20
Добавлен:
04.11.2018
Размер:
1.93 Mб
Скачать

2.6. Створення систем клієнт-сервер на основі зовнішнього базового сом-об’єкту

2.6.1. Основні поняття

Нагадаємо, що сервер СОМ являє собою Windows-застосунок (*.ехе), або динамічну бібліотеку(*.dll), який містить один або декілька COM-об'єктів одного або різних класів. Відрізняють три типи COM-серверів.

Внутрішній сервер (inprocess server) реалізується динамічними бібліотеками (*.dll), які підключаються до клієнта і працюють в одному адресному просторі.

Зовнішній локальний сервер (local server) створюється окремим процесом (*.exe), який працює на одному комп'ютері з клієнтом. У процесі виконання він розташовується у власному адресному просторі, відмінному від адресного простору клієнта.

Зовнішній віддалений сервер (remote server) створюється процесом (*.exe), який працює на іншому комп'ютері по відношенню до клієнта.

На відміну від вбудованих, зовнішні СОМ-сервери не експортують функції DllRegisterServer, DllUnregisterServer, DllGetClassObject і DllCanUnloadNow. Отже, для реєстрації в системному реєстрі Windows, зовнішні СОМ-сервери використовують інші методи — треба просто запустити сервер на виконання, включивши в командний рядок запуску ключ /regserver. У відповідь середовище Delphi самостійно зареєструє сервер і СОМ-об'єкти та завершить на цьому операцію без запуску сервера на виконання. Для видалення елемента реєстрації із системного реєстру потрібно використовувати ключ /unregserver.

2.6.2. Засоби організації потокової взаємодії клієнта і сервера

При створенні СОМ-об’єкту з використанням візарда обирається модель потоків, яку буде підтримувати СОМ-об'єкт. Вибір здійснюється шляхом встановлення параметра Threading model. Обираючи підтримку моделі потоків, можна поліпшити продуктивність COM-об’єкту, оскільки численні клієнти можуть отримувати паралельний доступ до СОМ-сервера.

Таблиця 2.1 включає різні моделі потоків, які можна визначити для СОМ-об’єкту.

Таблиця 2.1

Характеристики моделей потоків, які підтримують СОМ-об’єкти

Модель потоків

Опис

Аргументи за і проти

1

2

3

Single

Використовується у випадку, коли клієнт створює єдиний потік, у якому створює СОМ-об’єкт та формує свої запити. У СОМ-сервері створюється також один потік, у якому ці запити обробляються. Сервер не забезпечує підтримку потоків. Він серіалізує запити клієнта, щоб СОМ-застосунок одержував один запит за один раз. Це фіксується при реєстрації прапорами:

для DLL – прапор ThreadingModel не встановлено

для EXE – прапор IsMultiThread не встановлено.

Така модель звичайна для внутрішніх серверів.

Клієнт не створює потоку. Немає поліпшення продуктивності.

Apartment (секціоно-вана)

Використовується у випадку, коли клієнт створює декілька потоків, у кожному з яких породжує СОМ-об’єкт. Такі COM-об’єкти здатні оброблювати запити тільки від тих клієнтів, які їх створили.

Об'єкти можуть отримувати доступ до своїх власних даних застосунка, але глобальні дані мають бути захищені засобами синхронізації. Локальні змінні потоку доступні через численні виклики. Модель забезпечує підвищення продуктивності.

Таблиця 2.1 (закінчення)

1

2

3

Free (вільна)

Використовується у випадку, коли клієнт створює декілька потоків, у кожному з яких породжує СОМ-об’єкт. Такі СОМ-об'єкти здатні оброблювати виклики від будь-якої кількості потоків у будь-який час, але не підтримується синхронізація локальних і глобальних даних.

Об'єкти повинні захистити всі локальні і глобальні дані, використовуючи критичні секції або іншу форму синхронізації.

Both

Підтримуються обидві моделі (Free та Appartment). Використовується у випадку, коли клієнт створює декілька потоків, у кожному з яких породжує СОМ-об’єкт. Такі СОМ-об'єкти здатні оброблювати

виклики від будь-якої кількості потоків у будь-який час та підтримується синхронізація локальних і глобальних даних потоків.

Максимальна продуктивність і гнучкість. Не вимагає, щоб застосунок забезпечив підтримку потоку для параметрів вихідних викликів.

Neutral

Численні клієнти технології СОМ+ можуть звертатися до об’єкту у різних потоках одночасно, але COM перевіряє, щоб жодні виклики не суперечили один одному.

Ця модель доступна тільки для COM+. Для COM − це модель Apartment.

Примітка 1. Локальні змінні завжди зберігаються, незалежно від моделі потоків, оскільки локальні змінні завантажені в стек і кожен потік має власний стек.

Примітка 2. Модель потоків визначає, як об'єкт зареєстрований у системному реєстрі. Необхідно переконатися, що обрана об'єктна реалізація відповідає обраній моделі потоків. Для внутрішніх серверів, встановлення моделі потоків приводить до встановлення ознаки моделі в ключі ThreadingModel реєстрації CLSID.

Примітка 3. При зверненнях клієнтів до зовнішніх СОМ-серверів ініціюється COM найвищої викликаної моделі потоків. Наприклад, якщо СОМ-сервер включає free-threaded об'єкт, створюється free threading модель. Щоб вручну анулювати ознаку моделі потоків використовується змінна CoInitFlags.

Розроблення об’єкту, що підтримує вільну модель потоків. Використовувати Free-модель, краще ніж моделі Apartment в тому разі, коли об'єкт має бути доступний більш ніж з одного потоку. Загальний екземпляр СОМ-об’єкту надається застосункам клієнта підключеним до об’єкту, розташованого на віддаленій машині. Коли віддалений клієнт викликає метод на цьому об'єкті, сервер створює новий потік у пулі потоків на машині сервера. У цьому випадку користувач виконує виклики фактичного об'єкту і, оскільки об'єкт підтримує вільну модель потоків, потік може зробити прямий виклик методу об’єкту.

Для підтримки об'єктом Apartment моделі, виклик має бути переданий у потік, у якому об'єкт був створений, і результат має бути переведений назад у той самий потік, перед поверненням клієнту. Цей метод вимагає додаткового маршалінгу.

Щоб підтримувати Free-модель, необхідно використовувати критичні секції або деяку іншу форму синхронізації, щоб захищати дані застосунка.

Free модель для вбудованого сервера може поліпшити продуктивність, діючи як зовнішній об'єкт в агрегації з free-маршалінгом.

Розроблення об’єкту, що підтримує Apartment threading модель. Щоб реалізувати Apartment threading model (single-threaded) модель потоків, необхідно діяти за кількома правилами:

  • перший потік (WinMain) у застосунку повинен створювати СОМ-об’єкт, у цьому самому потоці має бути виконана деініціалізація СОМ;

  • якщо деякий потік одержав вказівник на інтерфейс, то він повинен використовуватися тільки у цьому потоці;

  • кожен потік в apartment threading моделі повинен мати цикл обробки повідомлень.

Сервер, що підтримує apartment model, забезпечує серіалізацію доступу до всіх глобальних даних (як наприклад, рахувальник екземплярів об’єкту).

Розроблення об’єкту, котрий підтримує нейтральну модель потоків. При використанні СОМ+ (технологія Microsoft Transaction Server − MTS) можна використовувати модель потоків, яка є проміжною між вільною моделлю й апартаментной моделлю. Модель допускає використання багатьох потоків для доступу до об'єкту. При цьому немає необхідності піклуватися про забезпечення додаткового маршалингу в потоці, в якому був створений об'єкт, більш того об'єкт гарантований від виникнення конфлікту при звертанні до нього.

При розробленні об’єкту з нейтральною моделлю потоків варто дотримуватися тих самих правил, як при написанні апартаментного потоку, за винятком того, що необхідно забезпечити синхронізацію даних об’єкту.