Yah, ZeroMQ agak sulit dibaca sebagai socket
-"rekanan"
Mengapa?
Klasik socket
adalah sumber daya yang dapat dimanfaatkan secara gratis.
ZeroMQ adalah hierarki ide dan prinsip perilaku yang agak kompleks (perilaku terdistribusi lebih baik), yang membantu merancang sistem komputasi terdistribusi cerdas, tanpa menyentuh detail tingkat rendah (disarikan dengan baik ZeroMQ), yang mengontrol aliran peristiwa aktual di badai dari kondisi yang keras semua sistem komputasi terdistribusi terbuka untuk dihadapi (dan harus menangani pada tingkat rendah yang sesuai, jika abstraksi tingkat tinggi yang "dijanjikan" oleh ZeroMQ untuk dipertahankan harus dipenuhi dan memudahkan pikiran perancang untuk lebih fokus pada / bagian aplikasi intinya, bukan mendesain ulang roda (dengan semua uji coba dan kesalahan) untuk menarik tali pada sumber daya O/S dan mengocok layanan sistem untuk mengumpulkan hanya beberapa jenis buah yang menggantung rendah ).
Untuk alasan ini lebih baik langsung lupakan ZeroMQ menjadi "sesuatu-seperti- socket
"
Hierarki ZeroMQ dalam waktu kurang dari lima detik
1:
ZeroMQ menjanjikan penggunaan ulang yang mudah dari beberapa Pola Komunikasi Formal yang Dapat Diskalakan arketipe menawarkan perilaku terdistribusi tertentu { PUB/SUB | PUSH/PULL | PAIR/PAIR | XPUB/XSUB | ... | REQ/REP }
.
2:
Kecuali kasus penggunaan eksklusif hanya tanpa perangkat inproc://
transport-class, dalam semua kasus lainnya, ZeroMQ memerlukan satu atau beberapa instance "mesin yang dapat disetel " - Context( nIOthreads = N )
, N >= 1
.
3:
Memiliki ini, apa saja ( soket mendatang ) Titik Akses bisa dibuat contoh, dengan pola dasar perilaku sejak saat lahir:
aSubscribeCHANNEL = aLocalCONTEXT.socket( zmq.SUB ) # this is NOT a <SOCKET>
# ^^^^^^__________________ even it was typed in
4:
Memiliki "Titik Akses " contoh sudah siap "di dalam" "mesin lokal ", seseorang dapat mengunci materialisasinya dalam realitas eksternal, menggunakan satu atau lebih ( ya, lebih ... WOW! Artinya lebih banyak tarikan masuk ke / peluit bertiup dari satu Titik Akses "simpul-perilaku" ) panggilan ke salah satu metode ini:
.bind(
<transport-class>://<a-class-specific-address>
)
atau
.connect(
<transport-class>://<a-class-specific-address>
)
5:
Jika dan hanya jika sebuah .bind()
-RTO-ready Access Point A "dikunjungi " oleh .connect()
langsung pertama -RTO-ready Access Point B, memiliki pasangan perilaku yang cocok, arketipe perpesanan/pensinyalan ZeroMQ aktif ( menamakannya juga soket mungkin digunakan karena alasan historis, untuk memudahkan penjelasan pada waktunya )
( PUB/PUB
tidak akan pernah cocok, karena alasan yang jelas, sedangkan PUB/SUB
dan banyak pasangan perilaku-pola dasar lainnya akan dan melakukan kecocokan yang indah dan membentuk perilaku yang "cocok" bersama yang akhirnya akan ditayangkan dan tetap demikian )
Jadi,
bagaimana saya melakukan hal yang sama dengan soket Python ZeroMQ,
diberikan mesin yang memiliki banyak alamat?
Cukup gunakan spesifikasi yang memenuhi syarat dalam panggilan ke
.bind(
"{ tcp | pgm | epgm }://<ip>:<port#>"
)
metode dan Anda selesai.
Semudah itu.
Keren, bukan?
Banyak kejutan menyenangkan lainnya di bawah kap penyetelan kinerja, pencukuran latensi, dan penyesuaian keamanan.