Binder হল ইন্টারপ্রসেস কমিউনিকেশনের একটি সিস্টেম যা Android-চালিত ডিভাইসে দুটি প্রসেসকে কমিউনিকেট করতে দেয়। বাইন্ডার অন্য প্রসেসে ফাংশন কল এক্সিকিউট করার উপায় প্রদান করে যা কলারের কাছে সম্পূর্ণ স্বচ্ছ।
বাইন্ডারের পরিভাষায়, কলিং প্রসেসকে ক্লায়েন্ট এবং এর এন্ডপয়েন্টকে বাইন্ডার প্রক্সি বা প্রক্সি বলা হয়। অন্যদিকে, যে প্রসেসকে কল করা হচ্ছে সেটি হল সার্ভার এবং এর এন্ডপয়েন্টকে বাইন্ডার নোড বা নোড বলা হয়।
প্রতিটি Node নিজস্ব ইন্টারফেস প্রকাশ ও প্রয়োগ করতে পারে। এবং, প্রক্সি ব্যবহার করে, ক্লায়েন্ট নোড ইন্টারফেসে পদ্ধতি এক্সিকিউট করতে পারে, যেন ইনভোকেশন একটি লোকাল ফাংশন কল। নিচের উদাহরণে একটি মেথডকে ইনভোক করা দেখানো হয়েছে:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
ধরে নিন যে foo()-কে কল করা ক্লায়েন্ট প্রসেস A-তে চলছে এবং foo()-কে প্রয়োগ করা সার্ভার
প্রসেস B-তে চলছে। ছবি ১-এ দেখানো হয়েছে কীভাবে এই কল
এক্সিকিউট করা হয়:
ছবি ১. বাইন্ডার কল এক্সিকিউশন।
অন্য প্রসেসে কোনও মেথড এক্সিকিউট করতে, ১ নম্বর ছবিতে দেখানো, নিম্নলিখিত ঘটনা ঘটে:
- প্রসেস 'ক'-এর ক্লায়েন্ট কোড, প্রসেস 'ক'-এর প্রক্সি কোডকে ইনভোক করে। প্রসেস A-তে
প্রক্সি কোড একটি ট্রানজ্যাকশন তৈরি করে যাতে নিম্নলিখিত আইটেমগুলি থাকে:
- নোডের জন্য একটি শনাক্তকারী
- নোডে
foo()পদ্ধতির শনাক্তকারী - আর্গুমেন্ট
aওb-এর কপি সহ একটি বাফার
- ট্রানজ্যাকশনটি বাইন্ডার কার্নেল ড্রাইভারের কাছে জমা দেওয়া হয়।
- বাইন্ডার কার্নেল ড্রাইভার নির্ধারণ করে যে প্রসেস B নোড হোস্ট করে।
- কার্নেল সম্পূর্ণ ট্রানজ্যাকশনটি প্রসেস B-এর অ্যাড্রেস স্পেসে কপি করে।
- ট্রানজ্যাকশন ম্যানেজ করার জন্য কার্নেল প্রসেস 'খ'-তে একটি থ্রেড খুঁজে নেয় এবং ট্রানজ্যাকশনটি সেটির কাছে পাঠিয়ে দেয়।
- থ্রেড ট্রানজ্যাকশন আনপ্যাক করে, নোড খুঁজে বের করে এবং নোড অবজেক্টে ট্রানজ্যাকশন পাঠায়।
- নোড অবজেক্ট ট্রানজ্যাকশন থেকে ফাংশন আইডেন্টিফায়ার পায়,
ট্রানজ্যাকশন বাফার থেকে
aওbআনপ্যাক করে এবং লোকাল ভেরিয়েবলেaওbস্টোর করে। - নোড অবজেক্ট, প্রসেস B-তে সার্ভার কোডে
foo(a, b)কল করে। - কলের ফলাফল একটি উত্তর ট্রানজ্যাকশনে ফেরত দেওয়া হয়, যা কার্নেল ড্রাইভারের কাছে এবং তারপরে প্রসেস A-তে কলিং প্রক্সিতে পাস করা হয়।
- প্রক্সি সেই ফলাফলটি প্রসেস A-তে কলারকে রিটার্ন করে।
বাইন্ডারের ব্যবহারিক প্রয়োগ
বিভিন্ন প্রসেসে থাকা সফ্টওয়্যারের মধ্যে যোগাযোগ স্থাপন করতে হবে, এমন বিভিন্ন পরিস্থিতিতে বাইন্ডার ব্যবহার করা যেতে পারে। যেমন:
ক্যামেরা অ্যাপ, অন্য প্রসেসে থাকা ক্যামেরা সার্ভারের সাথে যোগাযোগ করার জন্য বাইন্ডার ব্যবহার করে। ক্যামেরা সার্ভার তারপর অন্য একটি প্রসেসে ক্যামেরা HAL-এর সাথে যোগাযোগ করতে বাইন্ডার ব্যবহার করে।
অন্য প্রসেসে থাকা সিস্টেম সার্ভারের সাথে যোগাযোগ করার জন্য অ্যাপ বাইন্ডার ব্যবহার করে। অন্যান্য প্রসেসে HAL-এর সাথে কথা বলতে সিস্টেম সার্ভার বাইন্ডার ব্যবহার করে।
একটি প্রসেসের অ্যাপ, অন্য প্রসেসের অন্য অ্যাপের সাথে যোগাযোগ করার জন্য বাইন্ডার ব্যবহার করে।
অ্যাপ (
installd) ইনস্টল, আপডেট ও সরানোর জন্য দায়ী সিস্টেম ডেমন, অ্যাপ কম্পাইল করার জন্য Android রানটাইম ডেমন ('artd')-এর সাথে যোগাযোগ করতে বাইন্ডার ব্যবহার করে।
AIDL ও বাইন্ডার
IPC-এর জন্য বাইন্ডার ব্যবহার করে এমন প্রোগ্রামিং ইন্টারফেস নির্ধারণ করতে Android ইন্টারফেস ডিজাইন ল্যাঙ্গুয়েজ (AIDL) ব্যবহার করুন। আরও তথ্যের জন্য, AIDL ওভারভিউ দেখুন।