Apa perbedaan antara pola penerbit-pelanggan dan pola reaktor?


11

Publikasikan-berlangganan dan pola-pola Reaktor tampak sangat mirip dengan saya. Bagaimana mereka berbeda?

Dalam kedua pola pesan diteruskan ke pelanggan secara tidak langsung (pendengar dalam pola reaktor).

Saya merasa pola pengamat sangat mirip dengan dua pola lainnya juga.

Apa perbedaan utama antara pola-pola itu?

Jawaban:


12

Seperti yang saya lihat dari tautan, pola PubSub bukan pola OOP, melainkan pola olahpesan , yang merupakan pola arsitektur jaringan.

Pola reaktor adalah sesuatu yang terkait dengan penanganan permintaan server dengan loop peristiwa tunggal . Sekali lagi, tautan tersebut menunjukkan beberapa contoh bagus seperti Node.js, Netty, Twisted, dll.

Akhirnya, Pengamat adalah pola-desain OOP yang menggambarkan cara interaksi antara objek dalam kode-OO.

Jadi ketiga pola tersebut berasal dari domain yang berbeda.


6

Reactor = loop peristiwa tunggal berurutan yang menerima dan memproses permintaan. Permintaan tersebut dapat dimuat dalam batch dari file, melalui SMTP dan / atau HTTP. Respons yang diproses secara bersamaan disampaikan ketika siap alih-alih secara berurutan.

Penerbit memancarkan. Pelanggan mengkonsumsi.

Penerbit + Pelanggan = Pola pengamat (Pola Desain Kepala Pertama). Pengamat menembak secara berurutan dan biasanya memblokir sampai mereka selesai.


2

PubSub lebih terkait dengan Pesan Antrian (MQ). Itu ada hubungannya dengan bagaimana node menerima pesan asinkron dalam sistem terdistribusi.

Pola reaktor lebih berkaitan dengan peristiwa asinkron. Sebagai contoh, soket non-pemblokiran menggunakan pola reaktor untuk mengirimkan peristiwa jaringan: BACA, MENULIS, MENGHUBUNGKAN, MENERIMA

Anda dapat memeriksa CoralReactor untuk memiliki pemahaman yang lebih baik tentang pola reaktor.

Penafian : Saya adalah salah satu pengembang CoralReactor.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.