Komunikasi Antar Objek

COM dirancang untuk memungkinkan klien berkomunikasi secara transparan dengan objek, terlepas dari di mana objek tersebut berjalan—dalam proses yang sama, di komputer yang sama, atau di komputer yang berbeda. Ini menyediakan model pemrograman tunggal untuk semua jenis objek, dan untuk klien objek dan server objek.

Dari sudut pandang klien, semua objek diakses melalui penunjuk antarmuka. Penunjuk harus dalam proses. Bahkan, setiap panggilan ke fungsi antarmuka selalu mencapai beberapa bagian dari kode dalam proses terlebih dahulu. Jika objek sedang dalam proses, panggilan mencapainya secara langsung, tanpa mengintervensi kode infrastruktur sistem. Jika objek di luar proses, panggilan pertama-tama mencapai apa yang disebut objek "proksi" yang disediakan baik oleh COM atau oleh objek (jika implementor menginginkan). Paket proksi memanggil parameter (termasuk penunjuk antarmuka apa pun) dan menghasilkan panggilan prosedur jarak jauh yang sesuai (atau mekanisme komunikasi lainnya dalam kasus proksi yang dihasilkan khusus) ke proses lain atau komputer lain tempat implementasi objek berada. Proses pengemasan pointer untuk transmisi di seluruh batas proses ini disebut marshaling.

Dari sudut pandang server, semua panggilan ke fungsi antarmuka objek dilakukan melalui penunjuk ke antarmuka tersebut. Sekali lagi, penunjuk hanya memiliki konteks dalam satu proses, dan pemanggil harus selalu menjadi beberapa bagian dari kode dalam proses. Jika objek sedang dalam proses, pemanggil adalah klien itu sendiri. Jika tidak, pemanggil adalah objek "stub" yang disediakan oleh COM atau oleh objek itu sendiri. Stub menerima panggilan prosedur jarak jauh (atau mekanisme komunikasi lainnya dalam kasus proksi yang dihasilkan kustom) dari "proksi" dalam proses klien, membatalkan nama parameter, dan memanggil antarmuka yang sesuai pada objek server. Dari sudut pandang klien dan server, mereka selalu berkomunikasi langsung dengan beberapa kode dalam proses lainnya.

COM menyediakan implementasi marshaling, yang disebut sebagai marshaling standar. Implementasi ini bekerja sangat baik untuk sebagian besar objek dan sangat mengurangi persyaratan pemrograman, membuat proses marshaling secara efektif transparan.

Pemisahan antarmuka yang jelas dari implementasi transparansi proses COM dapat, bagaimanapun, menghalangi dalam beberapa situasi. Desain antarmuka yang berfokus pada fungsinya dari sudut pandang klien terkadang dapat menyebabkan keputusan desain yang bertentangan dengan implementasi antarmuka yang efisien di seluruh jaringan. Dalam kasus seperti ini, apa yang diperlukan bukanlah transparansi proses murni tetapi "transparansi proses, kecuali Anda perlu peduli." COM menyediakan kemampuan ini dengan memungkinkan pelaksana objek untuk mendukung marshaling kustom (juga disebut marshaling IMarshal). Marshaling standar adalah, pada kenyataannya, instans marshaling kustom; ini adalah implementasi default yang digunakan ketika objek tidak memerlukan marshaling kustom.

Anda dapat menerapkan marshaling kustom untuk memungkinkan objek mengambil tindakan yang berbeda ketika digunakan dari seluruh jaringan daripada yang diperlukan di bawah akses lokal dan sepenuhnya transparan kepada klien. Arsitektur ini memungkinkan untuk merancang antarmuka klien/objek tanpa memperhatikan masalah performa jaringan dan kemudian untuk mengatasi masalah performa jaringan tanpa mengganggu desain yang ditetapkan.

COM tidak menentukan bagaimana komponen disusun; ini menentukan bagaimana mereka berinteraksi. COM meninggalkan kekhawatiran tentang struktur internal komponen ke bahasa pemrograman dan lingkungan pengembangan. Sebaliknya, lingkungan pemrograman tidak memiliki standar yang ditetapkan untuk bekerja dengan objek di luar aplikasi langsung. Microsoft Visual C++, misalnya, bekerja sangat baik untuk memanipulasi objek di dalam aplikasi tetapi tidak memiliki dukungan untuk bekerja dengan objek di luar aplikasi. Umumnya, semua bahasa pemrograman lainnya sama dalam hal ini. Oleh karena itu, untuk menyediakan interoperabilitas jaringan, COM, melalui antarmuka independen bahasa, mengambil tempat bahasa pemrograman ditinggalkan.

Tidak langsung ganda dari struktur vtbl berarti bahwa penunjuk dalam tabel penunjuk fungsi tidak perlu menunjuk langsung ke implementasi nyata dalam objek nyata. Ini adalah jantung transparansi proses.

Untuk server dalam proses, di mana objek dimuat langsung ke dalam proses klien, penunjuk fungsi dalam tabel menunjuk langsung ke implementasi aktual. Dalam hal ini, panggilan fungsi dari klien ke metode antarmuka langsung mentransfer kontrol eksekusi ke metode . Namun, ini tidak dapat berfungsi untuk objek lokal, apalagi jarak jauh, karena pointer ke memori tidak dapat dibagikan di antara proses. Namun demikian, klien harus dapat memanggil metode antarmuka seolah-olah itu memanggil implementasi aktual. Dengan demikian, klien secara seragam mentransfer kontrol ke metode di beberapa objek dengan melakukan panggilan.

Klien selalu memanggil metode antarmuka dalam beberapa objek dalam proses. Jika objek aktual bersifat lokal atau jarak jauh, panggilan dilakukan ke objek proksi, yang kemudian melakukan panggilan prosedur jarak jauh ke objek aktual.

Jadi metode apa yang sebenarnya dijalankan? Jawabannya adalah bahwa setiap kali ada panggilan ke antarmuka di luar proses, setiap metode antarmuka diimplementasikan oleh objek proksi. Objek proksi selalu merupakan objek dalam proses yang bertindak atas nama objek yang dipanggil. Objek proksi ini tahu bahwa objek aktual berjalan di server lokal atau jarak jauh.

Objek proksi mengemas parameter fungsi dalam beberapa paket data dan menghasilkan panggilan RPC ke objek lokal atau jarak jauh. Paket itu diambil oleh objek stub dalam proses server pada komputer lokal atau jarak jauh, yang membongkar parameter dan melakukan panggilan ke implementasi nyata metode. Ketika fungsi tersebut kembali, stub memunculkan parameter keluar dan nilai yang dikembalikan dan mengirimkannya kembali ke proksi, yang membongkahnya dan mengembalikannya ke klien asli.

Dengan demikian, klien dan server selalu berbicara satu sama lain seolah-olah semuanya sedang dalam proses. Semua panggilan dari klien dan semua panggilan ke server, pada titik tertentu, dalam proses. Tetapi karena struktur vtbl memungkinkan beberapa agen, seperti COM, untuk mencegat semua panggilan fungsi dan semua pengembalian dari fungsi, agen tersebut dapat mengalihkan panggilan tersebut ke panggilan RPC seperlunya. Meskipun panggilan dalam proses lebih cepat daripada panggilan di luar proses, perbedaan proses sepenuhnya transparan untuk klien dan server.

Untuk mengetahui informasi selengkapnya, lihat topik berikut:

Klien dan Server COM

Marshaling Antarmuka