DDS yang Bijaksana
Ketersambungan Data Masa Nyata untuk Sistem Pertahanan
Perisian tengah yang menguasakan platform kenderaan kritikal misi
DDS berciri penuh dengan X-Type. DDS gred senjata untuk pertahanan.
Powering defence
Astute DDS ialah perisian tengah pengedaran data yang menjadi teras penyelesaian Seni Bina Kenderaan Generik (GVA) DEF-STAN 23-009 lengkap Astute Systems. Daripada sensor hingga skrin, satu platform bersepadu menghubungkan setiap subsistem dalam kenderaan tentera anda.
Why Publish/Subscribe
Masalah dengan Seni Bina Tradisional
Sistem kenderaan legasi menggunakan sambungan titik ke titik. Apabila anda menambah subsistem baharu, anda mesti mengubah suai setiap sistem yang digunakannya. Ini mewujudkan:
- ❌ Integrasi yang mahal — Setiap komponen baharu memerlukan pengekodan tersuai
- ❌ Sistem rapuh — Satu kegagalan boleh merebak melalui rangkaian
- ❌ Penguncian vendor — Protokol proprietari memerangkap anda dengan pembekal tunggal
- ❌ Naik taraf perlahan — Menukar satu subsistem bermakna menguji semula semuanya
Penyelesaian Terbitkan/Langgan
Dengan seni bina terbit/langgan DDS, subsistem hanya menerbitkan data kepada topik yang dinamakan. Mana-mana sistem yang memerlukan data tersebut melanggan topik tersebut. Tiada sambungan titik ke titik. Tiada kod integrasi tersuai.
| Manfaat Perniagaan | Bagaimana Pub/Sub Menyampaikan |
|---|---|
| 💰 Kos Integrasi yang Lebih Rendah | Menambah subsistem baharu tanpa mengubah suai subsistem sedia ada |
| 🔧 Penyelenggaraan Lebih Mudah | Gantikan atau naik taraf komponen secara bebas |
| 🛡️ Daya Tahan yang Lebih Tinggi | Sistem terus beroperasi walaupun sistem lain gagal |
| 🏭 Kebebasan Pelbagai Vendor | Campurkan peralatan daripada pembekal yang berbeza pada satu bas data |
| ⏱️ Masa ke Pasaran yang Lebih Pantas | Antara muka standard bermakna kurang pembangunan tersuai |
Sumber Tunggal untuk Susunan GVA Penuh
Astute Systems ialah satu-satunya vendor yang menyediakan susunan perisian bersepadu yang lengkap untuk kenderaan tentera yang mematuhi GVA:
| Komponen | Apa yang Ia Lakukan |
|---|---|
| Bohemia | Lihat dan sahkan model SysML, jana definisi antara muka |
| LDMX | Editor dan pengesah Model Data Tanah terbaik dalam kelasnya untuk LDM v10.0.0 |
| ToolX | Penjanaan kod automatik, integrasi binaan dan perkakasan penggunaan |
| DDS yang Bijaksana | Sambungkan semua subsistem dengan pengedaran data masa nyata yang selamat |
| Model Data Tanah v10.0.0 | Jenis data patuh GVA yang telah dibina terlebih dahulu untuk semua domain kenderaan |
| HMI yang Bijaksana | Perisian paparan kru memenuhi keperluan DEF-STAN 23-009 |
Manfaat Full Stack
| Manfaat | Impak |
|---|---|
| 🎯 Titik Tanggungjawab Tunggal | Satu kontrak, satu pasukan sokongan, satu rakan kongsi integrasi |
| 📋 Pematuhan Terbukti | Disahkan terlebih dahulu terhadap keperluan DEF-STAN 23-009 |
| 🔄 Kemas Kini yang Lancar | Tingkatkan mana-mana komponen tanpa merosakkan komponen lain |
| 💰 Kos yang Boleh Diramal | Tiada yuran integrasi yang mengejutkan atau masalah pelesenan |
| ⏱️ Penghantaran Lebih Pantas | Mulakan dengan perisian yang berfungsi, bukan rangka kerja kosong |
Comparison
Pertimbangan Perolehan
| Faktor | DDS yang Bijaksana | RTI Connext | CycloneDDS | OpenDDS | DDS Pantas |
|---|---|---|---|---|---|
| Model Lesen | Pilihan fleksibel | Iklan setiap tempat duduk | Gerhana EPL 2.0 | LGPL | Apache 2.0 |
| Kos Lesen | Kompetitif | $$$ setiap penggunaan | Percuma | Percuma | Percuma |
| Model Sokongan | Kontrak vendor Australia | Perusahaan global | Yayasan Gerhana | Iklan OCI | iklan eProsima |
| Sokongan Berasaskan Australia | ✅ Ya | ❌ Berpangkalan di AS | ❌ Tidak | ❌ Berpangkalan di AS | ❌ Berpangkalan di Sepanyol |
| Pra-Integrasi GVA | ✅ Terbina dalam | ❌ Kerja tersuai | ❌ Buatan Sendiri | ❌ Buatan Sendiri | ❌ Buatan Sendiri |
| Susunan Penuh Tersedia | ✅ Sumber tunggal: HMI + LDM + DDS + Alatan | ❌ Perisian tengah sahaja | ❌ Perisian tengah sahaja | ❌ Perisian tengah sahaja | ❌ Perisian tengah sahaja |
| Peralatan SysML | ✅ Bohemian + LDMX + ToolX | ❌ Tiada | ❌ Tiada | ❌ Tiada | ❌ Tiada |
| Kawalan Eksport | Bidang kuasa Australia | Pertimbangan ITAR AS | Kesatuan Eropah | AS | Kesatuan Eropah |
Perbandingan Ciri Teknikal
| Ciri | DDS yang Bijaksana | RTI Connext | CycloneDDS | OpenDDS | DDS Pantas |
|---|---|---|---|---|---|
| DDSI-RTPS 2.5 | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap |
| Keselamatan DDS 1.1 | ✅ Lengkap | ✅ Lengkap | ⚠️ Sebahagian | ✅ Lengkap | ✅ Lengkap |
| Jenis-X 1.3 | ✅ Lengkap | ✅ Lengkap | ⚠️ Sebahagian | ⚠️ Sebahagian | ⚠️ Sebahagian |
| API Data Dinamik | ✅ Lengkap | ✅ Lengkap | ❌ Tiada | ⚠️ Asas | ⚠️ Asas |
| Perkhidmatan TypeLookup | ✅ Lengkap | ✅ Lengkap | ❌ Tiada | ❌ Tiada | ⚠️ Sebahagian |
| Penapisan Kandungan | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap |
| Pengangkutan Memori Dikongsi | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ❌ Tiada | ✅ Lengkap |
| Pengangkutan TCP | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap | ✅ Lengkap |
| Salinan Sifar | ✅ Disokong | ✅ Disokong | ✅ Disokong | ❌ Tiada | ✅ Disokong |
Pematuhan Piawaian
| Piawai | DDS yang Bijaksana | RTI Connext | CycloneDDS | OpenDDS | DDS Pantas |
|---|---|---|---|---|---|
| OMG DDS 1.4 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDSI-RTPS 2.5 | ✅ | ✅ | ✅ | ✅ | ✅ |
| OMG DDS-XTypes 1.3 | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
| Keselamatan OMG DDS 1.1 | ✅ | ✅ | ⚠️ | ✅ | ✅ |
| OMG IDL 4.2 | ✅ | ✅ | ✅ | ✅ | ✅ |
| DEF-STAN 23-009 (GVA) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Model Data Tanah v10.0.0 | ✅ | ❌ | ❌ | ❌ | ❌ |
Sokongan Bahasa & Platform
| Keupayaan | DDS yang Bijaksana | RTI Connext | CycloneDDS | OpenDDS | DDS Pantas |
|---|---|---|---|---|---|
| C++ | C++20 | C++11 | Pembalut C99 | C++11 | C++11 |
| C | Melalui C++ | ✅ Asli | ✅ Asli | ❌ | ✅ Asli |
| Python | ✅ | ✅ | ✅ | ✅ | ✅ |
| Karat | ✅ | ❌ | ✅ | ❌ | ❌ |
| Linux | ✅ | ✅ | ✅ | ✅ | ✅ |
| Tingkap | ✅ | ✅ | ✅ | ✅ | ✅ |
| VxWorks | Peta Jalan | ✅ | ⚠️ | ✅ | ⚠️ |
| Terbenam/RTOS | ✅ Direka untuk | ✅ Varian mikro | ⚠️ | ⚠️ | ⚠️ |
| Pautan Statik | ✅ Perpustakaan tunggal | ⚠️ | ⚠️ Lib kongsi | ⚠️ Lib kongsi | ⚠️ Lib kongsi |
Mengapa Astute DDS Menang
| lwn RTI Connext | vs CycloneDDS | lawan OpenDDS | vs DDS Pantas |
|---|---|---|---|
| Pilihan pelesenan fleksibel | Sokongan X-Type yang lengkap | API Data Dinamik Lengkap | Sokongan yang berpangkalan di Australia |
| Penjual Australia, tiada kebimbangan ITAR | Keselamatan terbina dalam | Perkhidmatan TypeLookup | Pematuhan GVA penuh |
| Susunan GVA penuh sumber tunggal | LDMX + ToolX Terbaik dalam kelasnya | LDMX + ToolX Terbaik dalam kelasnya | Pelaksanaan yang lebih mudah |
| LDM v10.0.0 disertakan | Sokongan komersial | Bidang kuasa Australia | Jenis-X Lengkap |
Why Astute DDS
"Kami mengurangkan garis masa penyepaduan GVA kami sebanyak 40% menggunakan susunan Astute. Mempunyai seorang vendor yang bertanggungjawab untuk perisian tengah, HMI dan model data telah menghapuskan tuduhan yang mengganggu program sebelumnya."
— Pengurus Program, Perdana Menteri Pertahanan UK
Kebolehkendalian Terjamin
Astute DDS boleh dikendalikan sepenuhnya dengan semua pelaksanaan DDS utama. Kenderaan anda boleh berkomunikasi dengan lancar dengan:
Tiada penguncian vendor. Jika sistem rakan kongsi menggunakan pelaksanaan DDS yang berbeza, Astute DDS akan bersambung tanpa pengubahsuaian.
Pematuhan Piawaian Pertahanan
Dibina untuk Keperluan Ketenteraan
| Piawai | Status |
|---|---|
| DEF-STAN 23-009 | ✅ Pematuhan GVA sepenuhnya |
| Model Data Tanah v10.0.0 | ✅ Jenis domain lengkap |
| NATO STANAG | ✅ Sedia untuk saling kendalian |
| Keperluan Siber | ✅ Diperakui keselamatannya |
Keselamatan Yang Boleh Anda Percayai
- 🔐 Komunikasi yang disulitkan — Semua data dilindungi semasa transit
- 🎫 Pengesahan berasaskan sijil — Hanya sistem yang dibenarkan sahaja yang bersambung
- 📋 Dasar kawalan akses — Tentukan siapa yang boleh menerbitkan atau melanggan setiap topik
- 📝 Pembalakan audit penuh — Jejak lengkap untuk semakan keselamatan
Terbukti dalam Pengeluaran
Digunakan Merentasi Pelbagai Program
DDS yang bijak dipercayai oleh perdana menteri pertahanan di seluruh Australia, UK dan negara-negara bersekutu:
| Domain | Aplikasi |
|---|---|
| 🎖️ Kenderaan Berperisai | Paparan kru, gabungan sensor, penyepaduan senjata |
| 🤖 Robotik & Sistem Autonomi | Kenderaan darat tanpa pemandu, platform robotik, navigasi autonomi |
| 🛡️ Kaunter-UAS (CUAS) | Sistem pengesanan, pengesanan dan pemusnahan dron |
| ✈️ Stesen Kawalan Darat | Perintah dan kawalan UAV, suapan sensor |
| 🚢 Sistem Tentera Laut | Paparan jambatan, kawalan kerosakan, navigasi |
| 🏭 Latihan & Simulasi | Persekitaran sintetik, semakan selepas tindakan, taklimat |
🎬 Minta Demo
Lihat Astute DDS dan susunan GVA lengkap dalam tindakan. Ketahui lebih lanjut tentang susunan kami atau minta demonstrasi sekarang.
Frequently Asked Questions
Soalan utama yang paling kerap ditanya oleh pembangun apabila menggunakan Astute DDS.
1. Apakah itu Astute DDS?
Astute DDS ialah pelaksanaan C++20 bagi Perkhidmatan Pengedaran Data OMG
(DDS) DCPS API, protokol wayar DDSI-RTPS 2.5, sistem jenis DDS-XTypes 1.3,
Plugin DDS-Security 1.1/1.2, dan IDL 4.2. Ia dihantar sebagai statik
perpustakaan libastutedds.a (tambah pengikatan C, Python dan Rust) dan dihantar dengan
GUI diagnostik astutedds-inspect dan Demo Bentuk yang boleh dikendalikan.
2. Bagaimanakah saya boleh menerbitkan dan melanggan sesuatu topik?
Cipta DomainParticipant , Topic , kemudian DataWriter (sebelah penerbit)
atau DataReader (sebelah pelanggan):
using namespace astutedds::dcps;
auto dpf = DomainParticipantFactory::get_instance();
auto dp = dpf->create_participant(0, PARTICIPANT_QOS_DEFAULT, nullptr, 0);
auto topic = dp->create_topic("Hello", "HelloMsg", TOPIC_QOS_DEFAULT, nullptr, 0);
// Publisher
auto pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, nullptr, 0);
auto writer = pub->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, nullptr, 0);
writer->write(sample, HANDLE_NIL);
// Subscriber
auto sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, nullptr, 0);
auto reader = sub->create_datareader(topic, DATAREADER_QOS_DEFAULT, nullptr, 0);Lihat Bermula › Permohonan Pertama .
3. Apakah perbezaan antara read() dan take() ?
-
read()mengembalikan sampel tetapi **meninggalkannya dalam cache pembaca**, jadi panggilan kemudian (atau pembaca lain dalam pelanggan yang sama) boleh membacanya semula. -
take()mengembalikan sampel dan **mengalihkannya** daripada cache.
Gunakan read() apabila topik mewakili keadaan kongsi yang anda ingin periksa
berulang kali; gunakan take() apabila topik mewakili peristiwa yang anda ingin
makan tepat sekali.
4. Mengapakah pelanggan yang menyertai lewat tidak menerima sampel yang lebih awal?
Secara lalai DURABILITY ialah VOLATILE , jadi sampel ditulis sebelum pelanggan
dipadankan tidak dihantar. Untuk menghantar sampel bersejarah kepada peserta yang lewat,
konfigurasikan penulis dan padanan pembaca dengan TRANSIENT_LOCAL
ketahanan (yang juga memerlukan kebolehpercayaan RELIABLE ):
DataWriterQos qos;
writer->get_qos(qos);
qos.durability().kind = TRANSIENT_LOCAL_DURABILITY_QOS;
qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
writer->set_qos(qos); Untuk kegigihan merentasi permulaan semula penulis, gunakan
Perkhidmatan Kegigihan atau TRANSIENT / PERSISTENT
jenis ketahanan.
5. Apakah fungsi QoS RELIABILITY ?
-
BEST_EFFORT(lalai untuk banyak topik terbina dalam): sampel yang hilang pada wayar tidak dihantar semula. Overhed terendah. -
RELIABLE: penulis menjejaki pengakuan (ACKNACK/ denyutan jantung) daripada setiap pembaca yang sepadan dan menghantar semula nombor urutan yang terlepas sehingga
pembaca mengikuti perkembangan atau sejarahnya penuh.
Kebolehpercayaan adalah setiap penulis/setiap pembaca dan mesti serasi: BEST_EFFORT
Pembaca boleh menandingi penulis RELIABLE , tetapi tidak sebaliknya.
6. Apakah fungsi QoS DURABILITY ?
DURABILITY mengawal sama ada sampel disimpan untuk penghantaran kepada pembacayang menyertai selepas sampel ditulis:
| Jenis | Tersedia untuk mereka yang lewat menyertai? |
|---|---|
VOLATILE | Tidak |
TRANSIENT_LOCAL | Ya, semasa penulis masih hidup |
TRANSIENT | Ya, sepanjang hayat penulis (melalui Persistence Service) |
PERSISTENT | Ya, merentasi proses dimulakan semula (pada cakera) |
7. Apakah perbezaan antara HISTORY dan DURABILITY ?
HISTORY ( KEEP_LAST(depth) atau KEEP_ALL ) mengawal bilangan sampel yang cache penulis/pembaca disimpan pada bila-bila masa. DURABILITY mengawal sama ada
penulis menawarkan sampel kepada pembaca yang sepadan kemudian. Mereka bekerjasama tetapi
selesaikan masalah yang berbeza: KEEP_ALL sahaja tidak menyediakan sampel
kepada mereka yang lewat menyertai.
8. Bagaimanakah saya boleh menentukan ID domain?
Luluskan ID domain sebagai argumen pertama untuk create_participant :
auto dp = DomainParticipantFactory::get_instance()
->create_participant(42, PARTICIPANT_QOS_DEFAULT, nullptr, 0); Peserta di domain yang berbeza tidak berkomunikasi. Port DDSI-RTPS
formula 7400 + 250 * domain_id menentukan port UDP asas yang digunakan untuk
penemuan.
9. Mengapa penerbit dan pelanggan saya tidak menemui antara satu sama lain?
Punca-punca biasa:
- ID domain berbeza — kedua-dua peserta mesti menggunakan ID yang sama.
- Multicast disekat — SPDP menggunakan multicast UDP pada
239.255.0.1oleh
lalai. Periksa tembok api hos dan tukar pengintipan IGMP. - Antara muka rangkaian salah — pada hos berbilang rumah ditetapkan
ASTUTEDDS_NETWORK_INTERFACE=atau konfigurasikannya dalam profil JSON/XML penemuan (lihat Konfigurasi Penemuan JSON ). - QoS yang tidak serasi — lihat soalan 15.
- Pengangkutan berbeza — sahkan kedua-dua rakan sebaya menggunakan UDPv4 (atau kedua-dua UDPv6,
TCP, SHM).
Dayakan pengelogan jejak dengan ASTUTEDDS_LOG_LEVEL=trace dan periksa paket
tangkap dengan astutedds-inspect .
10. Apakah ciri-ciri IDL yang disokong?
Pengkompil astutedds-idl yang dibundel melaksanakan OMG IDL 4.2 termasuk:
- Jenis primitif (
boolean,octet, jenis integerint8–uint64,float/double/long double,char/wchar,string/wstring). - Struktur, kesatuan, penghitungan, bitmask, typedef.
- Jujukan, tatasusunan, peta bersempadan dan tidak bersempadan.
-
@key,@id,@optional,@default,@range,@min,@max,@unit,@extensibility(FINAL|APPENDABLE|MUTABLE),@nested. - Pemalar dan ruang nama
module.
C++ yang dijana menggunakan XCDR2 secara lalai dengan XCDR1 pilihan untuk interop.
11. Bagaimanakah saya menapis sampel yang saya terbitkan sendiri?
Dua pilihan:
- Abaikan pada peringkat peserta : panggil
dp->ignore_publication(handle)
meluluskanInstanceHandle_tpenulis tempatan. - Tapis dalam panggilan balik pembaca menggunakan
SampleInfo::publication_handle
dan membandingkannya denganget_instance_handle()penulis anda.
Topik yang ditapis kandungan juga boleh mengecualikan medan kunci yang diterbitkan sendiri.
12. Apakah aksara yang dibenarkan dalam nama topik?
Nama topik mungkin mengandungi aksara abjad angka ASCII, _ dan / sebagai
Pemisah hierarki. Panjangnya dibatasi oleh 256 aksara. Elakkan pendahuluan
digit dan awalan terbina dalam DDS yang dikhaskan ( DCPS , dds ). Nama jenis mengikut
peraturan yang sama.
13. Bagaimanakah saya boleh mengesan bila penulis atau pembaca jarak jauh telah tiada?
Pasang DataReaderListener dan laksanakan on_subscription_matched /
on_liveliness_changed , atau reader->get_subscription_matched_status() . current_count_changemedan adalah negatif apabila rakan sebaya tidak sepadan.
Keceriaan dikawal oleh QoS LIVELINESS — ditetapkan
kind = AUTOMATIC_LIVELINESS_QOS dengan lease_duration untuk mengesanrakan sebaya yang senyap dalam masa yang terhad.
14. Bagaimanakah saya boleh menerima panggilan balik apabila data baharu tiba?
Lampirkan pendengar dengan topeng DATA_AVAILABLE_STATUS :
class MyListener : public DataReaderListener {
void on_data_available(DataReader* reader) override {
// call reader->take(...) here
}
};
reader->set_listener(&listener, DATA_AVAILABLE_STATUS); kebakaran on_data_available untuk kedua-dua sampel baharu dan kitaran hayat contoh perubahan; sentiasa periksa SampleInfo::valid_data sebelum membatalkan rujukan
muatan sampel.
15. Apakah maksud "QoS Tidak Serasi"?
Penulis dan pembaca hanya sepadan apabila setiap Permintaan/QoS yang Ditawarkan adalah sepadan.
serasi:
| Dasar | Diminta ≤ Ditawarkan |
|---|---|
RELIABILITY | pembaca BEST_EFFORT ≤ penulis RELIABLE |
DURABILITY | jenis pembaca ≤ jenis penulis (mengikut susunan spesifikasi) |
DEADLINE | period pembaca ≥ period penulis |
LATENCY_BUDGET | duration pembaca ≥ duration penulis |
OWNERSHIP | mestilah sama rata ( SHARED atau EXCLUSIVE ) |
PARTITION | sekurang-kurangnya satu nama partition mesti bertindih |
Dengar untuk on_offered_incompatible_qos / on_requested_incompatible_qos
untuk mencari ID dasar yang tepat semasa masa jalan.
16. Bagaimanakah saya boleh menghantar sampel yang lebih besar daripada datagram UDP?
DDS yang bijak secara automatik memecahkan sampel yang lebih besar daripada yang dikonfigurasikan
fragment_size (1344 bait lalai untuk IPv4) dan memasangnya semula pada pembaca menggunakan submesej DDSI-RTPS DATA_FRAG . Protokol kebolehpercayaan
memulihkan serpihan yang hilang tanpa menghantar semula keseluruhan sampel.
Untuk sampel yang sangat besar (≥ 1 MB) tingkatkan penimbal soket OS:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608dan pertimbangkan untuk beralih kepada pengangkutan memori kongsi untuk pembaca tempatan.
17. Bagaimanakah saya boleh mengkonfigurasi antara muka rangkaian yang digunakan?
Tiga pilihan, mengikut keutamaan:
- Pembolehubah persekitaran:
ASTUTEDDS_NETWORK_INTERFACE=eth0. - Konfigurasi penemuan JSON — lihat Konfigurasi Penemuan JSON .
- Profil QoS XML — lihat Profil QoS DDS-XML .
Jika tiada yang ditetapkan, Astute DDS memilih antara muka bukan gelung balik pertama dengan
alamat berkemampuan multicast.
18. Bolehkah saya menggunakan Astute DDS pada rangkaian tanpa multicast?
Ya. Dua alternatif:
- Senarai rakan sebaya Unicast SPDP : menyediakan senarai pasangan hos/port rakan sebaya dalam
konfigurasi penemuan; pengumuman SPDP unicast DDS yang bijak kepada setiap rakan sebaya. - Pengangkutan TCP : tukar peserta kepada pengangkutan TCP RTPS untuk
persekitaran yang menyekat UDP sepenuhnya. Lihat
Penghala Domain DDS untuk merentasi rangkaian terpencil.
19. Bagaimanakah saya boleh menala untuk kependaman rendah?
- Gunakan kebolehpercayaan
RELIABLEdengan sejarahKEEP_LAST(1)pada kedua-dua hujungnya supaya
penghantaran semula adalah minimum. - Dayakan pengangkutan memori kongsi untuk peserta yang berada di lokasi bersama.
- Pin thread Astute DDS dengan afiniti CPU dan gunakan penjadualan masa nyata
(SCHED_FIFO) pada proses penerbit dan pelanggan. - Lumpuhkan Nagle dengan menggunakan UDP (lalai).
- Tingkatkan penimbal soket (lihat soalan 16) untuk menyerap letupan.
- Tetapkan
LATENCY_BUDGET = 0untuk melumpuhkan sebarang kelewatan pengelompokan.
20. Mengapakah saya melihat lonjakan kependaman apabila menerbitkan sampel yang besar?
Apabila sampel melebihi penimbal soket lalai OS (selalunya 208 KB pada Linux),
kernel menjatuhkan paket dan protokol yang boleh dipercayai mesti menghantar semula, menyebabkan
lonjakan. Menaikkan net.core.rmem_max / net.core.wmem_max kepada sekurang-kurangnya
saiz sampel menyelesaikan masalah ini. Pertimbangkan untuk memecahbelahkan dengan fragment_size yang lebih kecil
pada rangkaian lossy.
21. Bagaimanakah saya menghubungkan dua domain DDS?
Gunakan Penghala Domain Astute DDS — perkhidmatan yang menghubungkan dua atau lebih
domain dan meneruskan topik yang dikonfigurasikan antara mereka, dengan pilihan
penapisan kunci/kandungan dan terjemahan QoS. Lihat
Penghala Domain DDS .
22. Apakah pengikatan bahasa yang tersedia?
| Bahasa | Status | Nota |
|---|---|---|
| C++20 | Stabil | API Utama — libastutedds.a |
| C | Stabil | API Flat C untuk FFI, lihat include/astutedds/c/astutedds.h |
| Python | Stabil | pengikatan pybind11, CPython 3.10 – 3.13 |
| Karat | Beta | peti astutedds (pembungkus selamat di atas API C) |
23. Platform dan versi OS yang manakah disokong?
| Platform | Versi yang diuji |
|---|---|
| Linux | Ubuntu 22.04 / 24.04, RHEL 9 / 10, AlmaLinux 9 / 10, Debian 12 |
| Tingkap | Windows 10, Windows 11, Windows Server 2022 |
Roda Linux Python ditag manylinux_2_28 (glibc ≥ 2.28) dan dijalankan
pada mana-mana pengedaran yang serasi.
24. Bagaimanakah saya boleh mendayakan Keselamatan DDS?
- Artifak identiti peruntukan (X.509) dan kebenaran (XML bertandatangan).
- Konfigurasikan QoS sifat peserta dengan Pengesahan, Kawalan Akses dan
Ciri-ciri pemalam kripto (sijil CA, sijil/kunci identiti, fail kebenaran,
fail tadbir urus). - Pautan terhadap Astute DDS yang dibina dengan
-DASTUTEDDS_ENABLE_SECURITY=ON.
Lihat Keselamatan DDS untuk arahan hujung ke hujung dan
templat tadbir urus/kebenaran.
25. Bagaimanakah saya boleh mengekalkan data merentasi permulaan semula?
Jalankan Persistence Service bersama domain anda. Ia melanggan
topik TRANSIENT / PERSISTENT yang dikonfigurasikan, menyimpan sampel dalam setempat
pangkalan data (SQLite secara lalai), dan menerbitkannya semula ke late-joining
pelanggan — termasuk mereka yang menyertai selepas penulis asal tiada.
Lihat Perkhidmatan Kegigihan .
26. Bagaimanakah saya boleh merakam dan memainkan semula trafik?
Gunakan alat astutedds-record yang dibundel untuk menangkap domain ke dalam
.astdb , dan astutedds-replay untuk menerbitkannya kembali dengan laras penskalaan masa. Rakaman adalah peka jenis dan menggunakan XCDR2 secara dalaman. Lihat
Rakaman dan Main Semula .
27. Bagaimanakah saya mengembangkan jenis data tanpa mengurangkan bilangan pelanggan?
Anotasi jenis IDL dengan @extensibility(MUTABLE) (atau APPENDABLE ) dan
tag setiap ahli dengan @id(N) . Strim boleh ubah XCDR2 membenarkan:
- Menambah ahli baharu di kedua-dua hujung.
- Mengeluarkan ahli pilihan.
- Menyusun semula ahli.
Ahli yang tidak sepadan dilangkau melalui peraturan kebolehtugasan X-Types.
@extensibility(FINAL) mengunci susun atur dan mesti digunakan apabila binarikeserasian dengan pembaca XCDR1 legasi adalah penting.
28. Bagaimanakah saya menggunakan topik yang ditapis kandungan?
Cipta ContentFilteredTopic daripada topik biasa dengan penapis seperti SQL
ekspresi dan mengikat DataReader kepadanya:
std::vector params{"42"};
auto cft = dp->create_contentfilteredtopic(
"HighSeverity", topic, "severity > %0", params);
auto reader = sub->create_datareader(cft, DATAREADER_QOS_DEFAULT, nullptr, 0); Penapis dinilai pada bahagian penulis apabila mungkin untuk menjimatkan lebar jalur.
29. Bagaimanakah saya boleh mengkonfigurasi QoS daripada fail XML?
Gunakan XmlQosLoader untuk membaca profil DDS-XML dan menggunakannya semasa mencipta
entiti:
XmlQosLoader loader;
loader.load_file("qos_profiles.xml");
auto qos = loader.get_datawriter_qos("MyLib", "ReliableProfile");
auto writer = pub->create_datawriter(topic, qos, nullptr, 0); Lihat Profil QoS DDS-XML untuk skema dan yang telah diusahakan
contoh-contoh.
30. Bagaimanakah saya boleh menyahpepijat isu interop atau penemuan?
- Jalankan
astutedds-inspectterhadap domain untuk melihat yang ditemui
peserta, titik akhir dan status yang sepadan dalam masa nyata. - Tangkap trafik dengan
tcpdump -i any -w dds.pcap 'udp port 7400 or portrange 7400-7500'dan bukanya dalam Wireshark — pembedah RTPS
menyahkod SPDP, SEDP dan data pengguna. - Dayakan log jejak:
ASTUTEDDS_LOG_LEVEL=trace ASTUTEDDS_LOG_FILE=/tmp/astutedds.log. - Sahkan ID dan port entiti:
- Penulis/pembaca SPDP:
00:01:00:c2/00:01:00:c7 - Penerbitan SEDP:
00:00:03:c2/00:00:03:c7 - Langganan SEDP:
00:00:04:c2/00:00:04:c7 - Port asas:
7400 + 250 × domain_id.
- Penulis/pembaca SPDP:
- Sahkan kedua-dua rakan sebaya mengiklankan ID vendor dan versi protokol yang serasi
(DDSI-RTPS 2.5).