تشير بنية الخدمة إلى كيفية إنشاء الخدمات وكيفية تواصلها مع المكوّنات الأخرى في النظام.
إنشاء حِزم الخدمات
تجمّع حِزم الخدمات وحدات الخدمات ذات الصلة التي يمكن نشرها معًا. السمة الوحيدة المطلوبة لحزمة الخدمات هي الاسم. يشكّل الاسم مع اسم الحزمة الاسم المؤهّل بالكامل لحزمة الخدمات.
يتم تحديد حِزم الخدمات باستخدام ملفات Vehicle Services Interface Definition Language (VSIDL) (الملفات التي تحمل الامتداد .vsidl).
يوضّح المثال التالي حزمتَي خدمات: حزمة خدمات TirePressureMonitoring وحزمة خدمات BodyControl:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
}
service_bundle {
name: "BodyControl"
}
المكان:
service_bundleتحدّد البنية على أنّها حزمة خدمات.nameهو اسم حزمة الخدمات.
أنماط المراسلة: Pub/Sub واستدعاء الإجراء عن بُعد
يستخدم إطار عمل SDV نمطَي مراسلة أساسيَين: Pub/Sub واستدعاء الإجراء عن بُعد.
في Pub/Sub، يتفاعل النظام مع الحالة المتطورة للمركبة من خلال بث البيانات إلى أي مكوّنات مهتمة. يتم تنظيم البيانات في مواضيع. يرسل الناشرون رسائل حول المواضيع. يرسل الناشرون رسائل حول المواضيع بدون الحاجة إلى معرفة عدد المشتركين الذين يستمعون أو هويتهم. يتلقّى المشتركون رسائل حول المواضيع بدون معرفة الناشرين الذين أرسلوا الرسائل تحديدًا.
في المقابل، تم تصميم نمط استدعاء الإجراء عن بُعد من أجل الإجراء والنتيجة. يتم استخدامه عندما يبدأ المتصل طلبًا لأنه يهتم بالنتيجة المحدّدة أو تأكيد هذا الإجراء. يستدعي المتصل طريقة معيّنة على قناة.
على الرغم من أنّ هذين النمطَين يخدمان احتياجات تشغيلية مختلفة، إلا أنّهما يشتركان في سمة هيكلية مشتركة: يعتمد كلاهما على مسارات اتصال مُسمّاة، وهي المواضيع لـ Pub/Sub والقنوات لنمط استدعاء الإجراء عن بُعد، لفصل هوية المُرسِل عن هوية المُستلِم.
الإعلان عن الناشر والمشترك
النشر/الاشتراك هو نمط مراسلة لا يرسل فيه مُرسِلو الرسائل، الذين يُطلق عليهم الناشرون، الرسائل مباشرةً إلى مُستلِمين محدّدين، يُطلق عليهم المشتركون. بدلاً من ذلك، يصنّف الناشرون الرسائل في مواضيع ويشترك المشتركون في موضوع أو أكثر من مواضيع التواصل ويتلقّون فقط الرسائل المنشورة في هذه المواضيع. لمزيد من المعلومات عن النشر/الاشتراك، يُرجى الاطّلاع على مقالة نمط النشر/الاشتراك.
إضافة ناشر إلى حزمة خدمات
يوضّح المثال التالي ناشرًا تمت إضافته إلى حزمة خدمات TirePressureMonitoring:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
publisher {
message: "TirePressure"
topic: "front-left"
capacity: 10
}
}
service_bundle {
name: "BodyControl"
...
}
المكان:
publisherتنشر رسائل خدمة الرسائل في قائمة انتظار الرسائل.messageبنية البيانات أو نوع الرسالة المحدّد في مخزن البروتوكولات المؤقت (ملف بالامتداد.protobuf)topicمعرّف فريد لموضوع النشر يجب أن يكون بأحرف صغيرة مع استخدام الشرطة بين الكلمات.capacityعدد الرسائل التي يمكن أن تحتوي عليها قائمة انتظار النشر يجب أن يكون عددًا زوجيًا أكبر من أو يساوي 2.
إضافة اشتراك إلى حزمة خدمات
يوضّح المثال التالي ناشرًا تمت إضافته إلى حزمة خدمات BodyControl:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
publisher {
message: "TirePressure"
topic: "front-left"
capacity: 10
}
}
service_bundle {
name: "BodyControl"
subscriber {
message: "com.android.sdv.sample.vsidl.TirePressure"
topic: "front-left"
}
}
المكان:
subscriberتشترك حزمة الخدمات في المواضيع.messageبنية البيانات أو نوع الرسالة المحدّد في مخزن البروتوكولات المؤقت (ملف بالامتداد.protobuf)topicمعرّف فريد لموضوع النشر يجب أن يتطابق مع موضوع الناشر وأن يكون بأحرف صغيرة مع استخدام الشرطة بين الكلمات.
تحديد البرامج العميلة والخوادم لاستدعاء الإجراء عن بُعد
يوفّر استدعاء الإجراء عن بُعد استقلالية الموقع الجغرافي لاستدعاءات الدوال. في هذا النمط، تعمل القناة كنقطة التقاء مُسمّاة يلتقي فيها العميل ومقدّم الخدمة. من خلال استهداف القناة بدلاً من مثيل خدمة معيّن، يفصل إطار العمل بين الغرض من الأمر والموقع الجغرافي الفعلي للتنفيذ.
يُعيّن المثال التالي حزمة خدمات ClimateControl كخادم وحزمة خدمات BodyControl كبرنامج عميل:
package: "com.sdv.cc"
service_bundle {
name: "ClimateControl"
server {
service: "SetTemperature"
channel: "climate-control"
}
}
service_bundle {
name: "BodyControl"
client {
service: "SetTemperature"
channel: "climate-control"
}
}
المكان:
serverيشير إلى أنّ حزمة الخدمات هي خادم يقدّم بعض خدمات استدعاء الإجراء عن بُعد (محدّدة من خلالserviceعلى أنّهاSetTemperature).clientيشير إلى أنّ حزمة الخدمات هي برنامج عميل يستدعي خدمةSetTemperature.channelهو اسم قناة استدعاء الإجراء عن بُعد. يجب أن يكون بأحرف صغيرة مع استخدام الشرطة بين الكلمات وأن يكون فريدًا لكل خدمة.
يسمح هذا المثال لحزمة خدمات BodyControl بإجراء استدعاءات إجراء عن بُعد لحزمة خدمات ClimateControl لضبط درجة الحرارة.
الخطوات التالية
بعد تحديد البنية، يمكنك إنشاء رمز البرامج الوسيطة.